{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "cell_id": "5175f9585b1a4d65aceb70956770b0eb",
    "deepnote_cell_height": 70,
    "deepnote_cell_type": "markdown",
    "tags": []
   },
   "source": [
    "## Data Prepare & Labeled"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "cell_id": "cec76383-d8aa-4e26-bd2b-7bcf03b92ab5",
    "deepnote_cell_height": 81,
    "deepnote_cell_type": "code",
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 0,
    "execution_start": 1650379065781,
    "source_hash": "9b82ee11",
    "tags": []
   },
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# df = pd.read_excel('dataset/redbook.xlsx')\n",
    "# label_df = df.sample(1000)\n",
    "# label_df.to_csv('dataset/sample_1000.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "cell_id": "72125adb4cad4cefbe93254525865a0b",
    "deepnote_cell_height": 99,
    "deepnote_cell_type": "code",
    "deepnote_table_invalid": false,
    "deepnote_table_loading": false,
    "deepnote_table_state": {
     "filters": [],
     "pageIndex": 0,
     "pageSize": 10,
     "sortBy": []
    },
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 88,
    "execution_start": 1650379151962,
    "source_hash": "133dec8d",
    "tags": []
   },
   "outputs": [],
   "source": [
    "sample_df = pd.read_excel('dataset/sample_1000.xlsx')\n",
    "sample_df['category'] = sample_df['情感倾向'].apply(lambda x: 'O' if x == '其他' else x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### EDA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "y = sns.histplot(sample_df['category'], kde=True, stat=\"count\")\n",
    "y.bar_label(y.containers[0])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "cell_id": "8b51b42510b748a783fc51f926a7ea2e",
    "deepnote_cell_height": 62,
    "deepnote_cell_type": "markdown",
    "tags": []
   },
   "source": [
    "### Text vectorization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "cell_id": "55af7c57b1134a6485b9892b61470335",
    "deepnote_cell_height": 233,
    "deepnote_cell_type": "code",
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 13130,
    "execution_start": 1650379106312,
    "source_hash": "b0a12c5f",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "76f3d670cfb94325a0c02b125debdb7c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading:   0%|          | 0.00/295 [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6183aab079a34edb8f5629eabdbb29a8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading:   0%|          | 0.00/612 [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5c9e4382ab4a49eb9b43abbbc81da9eb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading:   0%|          | 0.00/107k [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0d2b43cbae7e4746b338ece87800c721",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading:   0%|          | 0.00/112 [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from transformers import AutoTokenizer\n",
    "\n",
    "tokenizer = AutoTokenizer.from_pretrained('uer/roberta-base-finetuned-dianping-chinese')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "cell_id": "8d084eb11e2a41128a14b33ec68c2ab2",
    "deepnote_cell_height": 62,
    "deepnote_cell_type": "markdown",
    "tags": []
   },
   "source": [
    "### Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "cell_id": "94683e32c4ba46fbae01b30ed8143459",
    "deepnote_cell_height": 477,
    "deepnote_cell_type": "code",
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 72,
    "execution_start": 1650379123979,
    "source_hash": "3f79c3aa",
    "tags": []
   },
   "outputs": [],
   "source": [
    "from torch import nn\n",
    "from transformers import BertModel\n",
    "\n",
    "class BertClassifier(nn.Module):\n",
    "\n",
    "    def __init__(self, dropout=0.5):\n",
    "\n",
    "        super(BertClassifier, self).__init__()\n",
    "\n",
    "        self.bert = BertModel.from_pretrained('uer/roberta-base-finetuned-dianping-chinese')\n",
    "        self.dropout = nn.Dropout(dropout)\n",
    "        self.linear = nn.Linear(768, 3)\n",
    "        self.relu = nn.ReLU()\n",
    "\n",
    "    def forward(self, input_id, mask):\n",
    "\n",
    "        _, pooled_output = self.bert(input_ids= input_id, attention_mask=mask,return_dict=False)\n",
    "        dropout_output = self.dropout(pooled_output)\n",
    "        linear_output = self.linear(dropout_output)\n",
    "        final_layer = self.relu(linear_output)\n",
    "\n",
    "        return final_layer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "cell_id": "13189aad430e48c4af8f4118d74144a7",
    "deepnote_cell_height": 62,
    "deepnote_cell_type": "markdown",
    "tags": []
   },
   "source": [
    "### DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "cell_id": "fec5f32f7a414770b6f35b25e1a99b65",
    "deepnote_cell_height": 765,
    "deepnote_cell_type": "code",
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 1,
    "execution_start": 1650379127327,
    "source_hash": "43a38ead",
    "tags": []
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "\n",
    "labels = {'N': 0,\n",
    "          'P': 1,\n",
    "          'O': 2\n",
    "          }\n",
    "\n",
    "\n",
    "class Dataset(torch.utils.data.Dataset):\n",
    "    def __init__(self, df):\n",
    "\n",
    "        self.labels = [labels[label] for label in df['category']]\n",
    "        self.texts = [\n",
    "            tokenizer(\n",
    "                str(row[\"title\"]) + \" \" + str(row[\"content\"]),\n",
    "                padding=\"max_length\",\n",
    "                max_length=512,\n",
    "                truncation=True,\n",
    "                return_tensors=\"pt\",\n",
    "            )\n",
    "            for _, row in df.iterrows()\n",
    "        ]\n",
    "\n",
    "    def classes(self):\n",
    "        return self.labels\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.labels)\n",
    "\n",
    "    def get_batch_labels(self, idx):\n",
    "        try:\n",
    "            return np.array(self.labels[idx])\n",
    "        except:\n",
    "            print(idx)\n",
    "            print(self.labels)\n",
    "\n",
    "    def get_batch_texts(self, idx):\n",
    "        return self.texts[idx]\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "        batch_texts = self.get_batch_texts(idx)\n",
    "        batch_y = self.get_batch_labels(idx)\n",
    "        return batch_texts, batch_y\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "cell_id": "1826bf0978844831bca7814446abc19b",
    "deepnote_cell_height": 62,
    "deepnote_cell_type": "markdown",
    "tags": []
   },
   "source": [
    "### Training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "cell_id": "d8362326b2a9420491be96281230d633",
    "deepnote_cell_height": 1305,
    "deepnote_cell_type": "code",
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 16,
    "execution_start": 1650379130667,
    "source_hash": "e104d298",
    "tags": []
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import os\n",
    "from torch.optim import Adam\n",
    "from tqdm import tqdm\n",
    "from sklearn.metrics import classification_report\n",
    "\n",
    "def train(model, train_data, val_data, learning_rate, epochs):\n",
    "\n",
    "    train, val = Dataset(train_data), Dataset(val_data)\n",
    "\n",
    "    train_target = torch.tensor(train.labels, dtype=torch.long)\n",
    "    train_class_sample_count = torch.tensor([(train_target == t).sum() for t in torch.unique(train_target, sorted=True)])\n",
    "    train_weight = 1. / train_class_sample_count.float()\n",
    "    train_samples_weight = torch.tensor([train_weight[t] for t in train_target])\n",
    "\n",
    "    train_dataloader = torch.utils.data.DataLoader(\n",
    "        train, batch_size=2, \n",
    "        sampler=torch.utils.data.WeightedRandomSampler(train_samples_weight, len(train_samples_weight), replacement=True)\n",
    "    )\n",
    "    val_dataloader = torch.utils.data.DataLoader(val, batch_size=2)\n",
    "\n",
    "    use_cuda = torch.cuda.is_available()\n",
    "    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n",
    "    # criterion = torch.hub.load(\n",
    "    #     'adeelh/pytorch-multi-class-focal-loss',\n",
    "    #     model='FocalLoss',\n",
    "    #     alpha=train_weight,\n",
    "    #     gamma=3,\n",
    "    #     reduction='mean',\n",
    "    #     force_reload=False\n",
    "    # )\n",
    "    criterion = nn.CrossEntropyLoss(weight=train_weight)\n",
    "\n",
    "    start_epoch = 0\n",
    "    optimizer = Adam(model.parameters(), lr=learning_rate)\n",
    "    # if os.path.exists(continue_train_path):\n",
    "    #     checkpoint = torch.load(continue_train_path)\n",
    "    #     model.load_state_dict(checkpoint['model'])\n",
    "    #     optimizer.load_state_dict(checkpoint['optimizer'])\n",
    "    #     start_epoch = checkpoint['epoch']\n",
    "\n",
    "    if use_cuda:\n",
    "\n",
    "        model = model.cuda()\n",
    "        criterion = criterion.cuda()\n",
    "\n",
    "    best_model = None\n",
    "    best_optimizer = None\n",
    "    best_epoch = None\n",
    "    best_val_loss = float('inf')\n",
    "    best_true = None\n",
    "    best_pred = None\n",
    "\n",
    "\n",
    "    for epoch in range(start_epoch+1, epochs+1):\n",
    "\n",
    "        total_acc_train = 0\n",
    "        total_loss_train = 0\n",
    "        for train_input, train_label in tqdm(train_dataloader):\n",
    "            train_label = train_label.to(device)\n",
    "            mask = train_input[\"attention_mask\"].to(device)\n",
    "            input_id = train_input[\"input_ids\"].squeeze(1).to(device)\n",
    "\n",
    "            output = model(input_id, mask)\n",
    "\n",
    "            batch_loss = criterion(output, train_label)\n",
    "            total_loss_train += batch_loss.item()\n",
    "\n",
    "            acc = (output.argmax(dim=1) == train_label).sum().item()\n",
    "            total_acc_train += acc\n",
    "\n",
    "            model.zero_grad()\n",
    "            batch_loss.backward()\n",
    "            optimizer.step()\n",
    "\n",
    "        total_acc_val = 0\n",
    "        total_loss_val = 0\n",
    "\n",
    "        val_pred = []\n",
    "        with torch.no_grad():\n",
    "\n",
    "            for val_input, val_label in val_dataloader:\n",
    "\n",
    "                val_label = val_label.to(device)\n",
    "                mask = val_input[\"attention_mask\"].to(device)\n",
    "                input_id = val_input[\"input_ids\"].squeeze(1).to(device)\n",
    "\n",
    "                output = model(input_id, mask)\n",
    "\n",
    "                batch_loss = criterion(output, val_label)\n",
    "                total_loss_val += batch_loss.item()\n",
    "\n",
    "                batch_val_pred = output.argmax(dim=1)\n",
    "                val_pred = val_pred + batch_val_pred.tolist()\n",
    "                acc = (batch_val_pred == val_label).sum().item()\n",
    "                total_acc_val += acc\n",
    "\n",
    "        var_acc = total_acc_val / len(val_data)\n",
    "        var_loss = total_loss_val / len(val_data)\n",
    "        print(\n",
    "            f\"Epochs: {epoch + 1} | Train Loss: {total_loss_train / len(train_data): .3f} \\\n",
    "                | Train Accuracy: {total_acc_train / len(train_data): .3f} \\\n",
    "                | Val Loss: {var_loss: .3f} \\\n",
    "                | Val Accuracy: {var_acc: .3f}\"\n",
    "        )\n",
    "\n",
    "        if best_val_loss > var_loss:\n",
    "            best_val_loss = var_loss\n",
    "            best_model = model\n",
    "            best_optimizer = optimizer\n",
    "            best_epoch = epoch\n",
    "            best_true = val.labels\n",
    "            best_pred = val_pred\n",
    "        \n",
    "    return best_model, best_optimizer, best_epoch, best_val_loss, best_true, best_pred\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Evaluate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "\n",
    "def evaluate(model, test_data):\n",
    "\n",
    "    test = Dataset(test_data)\n",
    "\n",
    "    test_dataloader = torch.utils.data.DataLoader(test, batch_size=2)\n",
    "\n",
    "    use_cuda = torch.cuda.is_available()\n",
    "    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n",
    "\n",
    "    if use_cuda:\n",
    "\n",
    "        model = model.cuda()\n",
    "\n",
    "    total_acc_test = 0\n",
    "    test_pred = []\n",
    "    with torch.no_grad():\n",
    "\n",
    "        for test_input, test_label in test_dataloader:\n",
    "\n",
    "            test_label = test_label.to(device)\n",
    "            mask = test_input['attention_mask'].to(device)\n",
    "            input_id = test_input['input_ids'].squeeze(1).to(device)\n",
    "\n",
    "            output = model(input_id, mask)\n",
    "            batch_test_pred = output.argmax(dim=1)\n",
    "            test_pred = test_pred + batch_test_pred.tolist()\n",
    "            acc = (batch_test_pred == test_label).sum().item()\n",
    "            total_acc_test += acc\n",
    "\n",
    "    print(f'Test Accuracy: {total_acc_test / len(test_data): .3f}')\n",
    "    return test_pred, test.labels\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Split data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "df_train, df_val, df_test = np.split(\n",
    "    sample_df.sample(frac=1, random_state=42),\n",
    "    [int(0.8 * len(sample_df)), int(0.9 * len(sample_df))],\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "cell_id": "b4f6127364214d67973c4055919a65cc",
    "deepnote_cell_height": 648.5,
    "deepnote_cell_type": "code",
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 39735,
    "execution_start": 1650379159208,
    "owner_user_id": "cab3b104-0ce6-4e64-b13a-0c3b6085828b",
    "source_hash": "d5e9408a",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "------------fold no---------0----------------------\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4ee14c630791446fb6b81c039928f31b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading:   0%|          | 0.00/390M [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at uer/roberta-base-finetuned-dianping-chinese were not used when initializing BertModel: ['classifier.bias', 'classifier.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
      "100%|██████████| 480/480 [00:57<00:00,  8.30it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 2 | Train Loss:  0.518                 | Train Accuracy:  0.372                 | Val Loss:  0.591                 | Val Accuracy:  0.163\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:58<00:00,  8.17it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 3 | Train Loss:  0.420                 | Train Accuracy:  0.477                 | Val Loss:  0.534                 | Val Accuracy:  0.412\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.13it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 4 | Train Loss:  0.275                 | Train Accuracy:  0.744                 | Val Loss:  0.395                 | Val Accuracy:  0.675\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:58<00:00,  8.16it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 5 | Train Loss:  0.177                 | Train Accuracy:  0.833                 | Val Loss:  0.276                 | Val Accuracy:  0.750\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:58<00:00,  8.15it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 6 | Train Loss:  0.122                 | Train Accuracy:  0.877                 | Val Loss:  0.177                 | Val Accuracy:  0.856\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:58<00:00,  8.14it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 7 | Train Loss:  0.086                 | Train Accuracy:  0.919                 | Val Loss:  0.127                 | Val Accuracy:  0.912\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.11it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 8 | Train Loss:  0.066                 | Train Accuracy:  0.947                 | Val Loss:  0.086                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.12it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 9 | Train Loss:  0.055                 | Train Accuracy:  0.957                 | Val Loss:  0.079                 | Val Accuracy:  0.969\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.04it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 10 | Train Loss:  0.033                 | Train Accuracy:  0.978                 | Val Loss:  0.058                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.07it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 11 | Train Loss:  0.024                 | Train Accuracy:  0.984                 | Val Loss:  0.047                 | Val Accuracy:  0.981\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.07it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 12 | Train Loss:  0.016                 | Train Accuracy:  0.986                 | Val Loss:  0.042                 | Val Accuracy:  0.981\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.08it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 13 | Train Loss:  0.014                 | Train Accuracy:  0.989                 | Val Loss:  0.034                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.10it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 14 | Train Loss:  0.009                 | Train Accuracy:  0.994                 | Val Loss:  0.028                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.10it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 15 | Train Loss:  0.010                 | Train Accuracy:  0.996                 | Val Loss:  0.021                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.07it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 16 | Train Loss:  0.008                 | Train Accuracy:  0.991                 | Val Loss:  0.022                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 17 | Train Loss:  0.009                 | Train Accuracy:  0.992                 | Val Loss:  0.018                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 18 | Train Loss:  0.005                 | Train Accuracy:  0.997                 | Val Loss:  0.016                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.07it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 19 | Train Loss:  0.008                 | Train Accuracy:  0.996                 | Val Loss:  0.014                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 20 | Train Loss:  0.003                 | Train Accuracy:  0.994                 | Val Loss:  0.012                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 21 | Train Loss:  0.006                 | Train Accuracy:  0.993                 | Val Loss:  0.012                 | Val Accuracy:  0.988\n",
      "fold: 0: \n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        14\n",
      "           1       1.00      0.98      0.99        97\n",
      "           2       0.96      1.00      0.98        49\n",
      "\n",
      "    accuracy                           0.99       160\n",
      "   macro avg       0.99      0.99      0.99       160\n",
      "weighted avg       0.99      0.99      0.99       160\n",
      "\n",
      "------------fold no---------1----------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at uer/roberta-base-finetuned-dianping-chinese were not used when initializing BertModel: ['classifier.bias', 'classifier.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 2 | Train Loss:  0.513                 | Train Accuracy:  0.425                 | Val Loss:  0.540                 | Val Accuracy:  0.388\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 3 | Train Loss:  0.325                 | Train Accuracy:  0.633                 | Val Loss:  0.441                 | Val Accuracy:  0.569\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.11it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 4 | Train Loss:  0.176                 | Train Accuracy:  0.828                 | Val Loss:  0.346                 | Val Accuracy:  0.738\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.11it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 5 | Train Loss:  0.107                 | Train Accuracy:  0.911                 | Val Loss:  0.242                 | Val Accuracy:  0.838\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 6 | Train Loss:  0.092                 | Train Accuracy:  0.916                 | Val Loss:  0.176                 | Val Accuracy:  0.881\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 7 | Train Loss:  0.053                 | Train Accuracy:  0.943                 | Val Loss:  0.131                 | Val Accuracy:  0.900\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.10it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 8 | Train Loss:  0.033                 | Train Accuracy:  0.966                 | Val Loss:  0.116                 | Val Accuracy:  0.900\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 9 | Train Loss:  0.031                 | Train Accuracy:  0.964                 | Val Loss:  0.104                 | Val Accuracy:  0.906\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.06it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 10 | Train Loss:  0.018                 | Train Accuracy:  0.973                 | Val Loss:  0.096                 | Val Accuracy:  0.906\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 11 | Train Loss:  0.026                 | Train Accuracy:  0.966                 | Val Loss:  0.060                 | Val Accuracy:  0.950\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.10it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 12 | Train Loss:  0.017                 | Train Accuracy:  0.978                 | Val Loss:  0.058                 | Val Accuracy:  0.938\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.11it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 13 | Train Loss:  0.015                 | Train Accuracy:  0.981                 | Val Loss:  0.057                 | Val Accuracy:  0.938\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.10it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 14 | Train Loss:  0.013                 | Train Accuracy:  0.977                 | Val Loss:  0.049                 | Val Accuracy:  0.963\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 15 | Train Loss:  0.016                 | Train Accuracy:  0.975                 | Val Loss:  0.049                 | Val Accuracy:  0.950\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.08it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 16 | Train Loss:  0.010                 | Train Accuracy:  0.984                 | Val Loss:  0.047                 | Val Accuracy:  0.950\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 17 | Train Loss:  0.014                 | Train Accuracy:  0.989                 | Val Loss:  0.048                 | Val Accuracy:  0.944\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.07it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 18 | Train Loss:  0.010                 | Train Accuracy:  0.994                 | Val Loss:  0.045                 | Val Accuracy:  0.950\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.10it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 19 | Train Loss:  0.009                 | Train Accuracy:  0.988                 | Val Loss:  0.046                 | Val Accuracy:  0.944\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 20 | Train Loss:  0.005                 | Train Accuracy:  0.998                 | Val Loss:  0.041                 | Val Accuracy:  0.956\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.09it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 21 | Train Loss:  0.006                 | Train Accuracy:  0.996                 | Val Loss:  0.041                 | Val Accuracy:  0.969\n",
      "fold: 1: \n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        14\n",
      "           1       1.00      0.98      0.99        97\n",
      "           2       0.96      1.00      0.98        49\n",
      "\n",
      "    accuracy                           0.99       160\n",
      "   macro avg       0.99      0.99      0.99       160\n",
      "weighted avg       0.99      0.99      0.99       160\n",
      "\n",
      "------------fold no---------2----------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at uer/roberta-base-finetuned-dianping-chinese were not used when initializing BertModel: ['classifier.bias', 'classifier.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 18 | Train Loss:  0.007                 | Train Accuracy:  0.992                 | Val Loss:  0.023                 | Val Accuracy:  0.994\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 19 | Train Loss:  0.003                 | Train Accuracy:  0.994                 | Val Loss:  0.024                 | Val Accuracy:  0.994\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.06it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 20 | Train Loss:  0.003                 | Train Accuracy:  0.995                 | Val Loss:  0.023                 | Val Accuracy:  0.994\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 21 | Train Loss:  0.002                 | Train Accuracy:  0.998                 | Val Loss:  0.022                 | Val Accuracy:  0.994\n",
      "fold: 2: \n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        15\n",
      "           1       0.99      1.00      0.99        92\n",
      "           2       1.00      0.98      0.99        53\n",
      "\n",
      "    accuracy                           0.99       160\n",
      "   macro avg       1.00      0.99      1.00       160\n",
      "weighted avg       0.99      0.99      0.99       160\n",
      "\n",
      "------------fold no---------3----------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at uer/roberta-base-finetuned-dianping-chinese were not used when initializing BertModel: ['classifier.bias', 'classifier.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 2 | Train Loss:  0.527                 | Train Accuracy:  0.442                 | Val Loss:  0.539                 | Val Accuracy:  0.375\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.06it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 3 | Train Loss:  0.361                 | Train Accuracy:  0.657                 | Val Loss:  0.522                 | Val Accuracy:  0.412\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.06it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 4 | Train Loss:  0.213                 | Train Accuracy:  0.699                 | Val Loss:  0.481                 | Val Accuracy:  0.412\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 5 | Train Loss:  0.147                 | Train Accuracy:  0.731                 | Val Loss:  0.370                 | Val Accuracy:  0.631\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 6 | Train Loss:  0.095                 | Train Accuracy:  0.866                 | Val Loss:  0.223                 | Val Accuracy:  0.869\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.06it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 7 | Train Loss:  0.052                 | Train Accuracy:  0.946                 | Val Loss:  0.124                 | Val Accuracy:  0.944\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 8 | Train Loss:  0.036                 | Train Accuracy:  0.971                 | Val Loss:  0.082                 | Val Accuracy:  0.969\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.06it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 9 | Train Loss:  0.027                 | Train Accuracy:  0.975                 | Val Loss:  0.050                 | Val Accuracy:  0.981\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 10 | Train Loss:  0.020                 | Train Accuracy:  0.991                 | Val Loss:  0.038                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 11 | Train Loss:  0.018                 | Train Accuracy:  0.983                 | Val Loss:  0.023                 | Val Accuracy:  1.000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 12 | Train Loss:  0.011                 | Train Accuracy:  0.990                 | Val Loss:  0.020                 | Val Accuracy:  1.000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 13 | Train Loss:  0.009                 | Train Accuracy:  0.991                 | Val Loss:  0.014                 | Val Accuracy:  1.000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.06it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 14 | Train Loss:  0.006                 | Train Accuracy:  0.998                 | Val Loss:  0.010                 | Val Accuracy:  1.000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 15 | Train Loss:  0.004                 | Train Accuracy:  0.997                 | Val Loss:  0.009                 | Val Accuracy:  1.000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 16 | Train Loss:  0.004                 | Train Accuracy:  0.996                 | Val Loss:  0.007                 | Val Accuracy:  1.000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.07it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 17 | Train Loss:  0.004                 | Train Accuracy:  0.996                 | Val Loss:  0.007                 | Val Accuracy:  1.000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 18 | Train Loss:  0.003                 | Train Accuracy:  0.997                 | Val Loss:  0.005                 | Val Accuracy:  1.000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 19 | Train Loss:  0.002                 | Train Accuracy:  0.995                 | Val Loss:  0.004                 | Val Accuracy:  1.000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 20 | Train Loss:  0.003                 | Train Accuracy:  0.993                 | Val Loss:  0.003                 | Val Accuracy:  1.000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.06it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 21 | Train Loss:  0.002                 | Train Accuracy:  0.996                 | Val Loss:  0.003                 | Val Accuracy:  1.000\n",
      "fold: 3: \n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        13\n",
      "           1       1.00      1.00      1.00        95\n",
      "           2       1.00      1.00      1.00        52\n",
      "\n",
      "    accuracy                           1.00       160\n",
      "   macro avg       1.00      1.00      1.00       160\n",
      "weighted avg       1.00      1.00      1.00       160\n",
      "\n",
      "------------fold no---------4----------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at uer/roberta-base-finetuned-dianping-chinese were not used when initializing BertModel: ['classifier.bias', 'classifier.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
      "100%|██████████| 480/480 [00:59<00:00,  8.12it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 2 | Train Loss:  0.542                 | Train Accuracy:  0.335                 | Val Loss:  0.544                 | Val Accuracy:  0.206\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.10it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 3 | Train Loss:  0.489                 | Train Accuracy:  0.487                 | Val Loss:  0.513                 | Val Accuracy:  0.375\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.07it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 4 | Train Loss:  0.304                 | Train Accuracy:  0.611                 | Val Loss:  0.443                 | Val Accuracy:  0.419\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.08it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 5 | Train Loss:  0.200                 | Train Accuracy:  0.658                 | Val Loss:  0.414                 | Val Accuracy:  0.412\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.04it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 6 | Train Loss:  0.199                 | Train Accuracy:  0.644                 | Val Loss:  0.395                 | Val Accuracy:  0.431\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.04it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 7 | Train Loss:  0.181                 | Train Accuracy:  0.669                 | Val Loss:  0.380                 | Val Accuracy:  0.463\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 8 | Train Loss:  0.162                 | Train Accuracy:  0.709                 | Val Loss:  0.371                 | Val Accuracy:  0.519\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.08it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 9 | Train Loss:  0.140                 | Train Accuracy:  0.747                 | Val Loss:  0.349                 | Val Accuracy:  0.662\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.04it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 10 | Train Loss:  0.131                 | Train Accuracy:  0.872                 | Val Loss:  0.264                 | Val Accuracy:  0.881\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.06it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 11 | Train Loss:  0.097                 | Train Accuracy:  0.916                 | Val Loss:  0.186                 | Val Accuracy:  0.887\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.04it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 12 | Train Loss:  0.046                 | Train Accuracy:  0.957                 | Val Loss:  0.101                 | Val Accuracy:  0.931\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 13 | Train Loss:  0.021                 | Train Accuracy:  0.966                 | Val Loss:  0.081                 | Val Accuracy:  0.938\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.99it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 14 | Train Loss:  0.018                 | Train Accuracy:  0.968                 | Val Loss:  0.072                 | Val Accuracy:  0.956\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.04it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 15 | Train Loss:  0.012                 | Train Accuracy:  0.977                 | Val Loss:  0.066                 | Val Accuracy:  0.963\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 16 | Train Loss:  0.010                 | Train Accuracy:  0.989                 | Val Loss:  0.056                 | Val Accuracy:  0.969\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 17 | Train Loss:  0.012                 | Train Accuracy:  0.982                 | Val Loss:  0.048                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.04it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 18 | Train Loss:  0.008                 | Train Accuracy:  0.993                 | Val Loss:  0.045                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 19 | Train Loss:  0.013                 | Train Accuracy:  0.994                 | Val Loss:  0.035                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 20 | Train Loss:  0.007                 | Train Accuracy:  0.997                 | Val Loss:  0.029                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 21 | Train Loss:  0.004                 | Train Accuracy:  0.999                 | Val Loss:  0.031                 | Val Accuracy:  0.988\n",
      "fold: 4: \n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        13\n",
      "           1       1.00      1.00      1.00        95\n",
      "           2       1.00      1.00      1.00        52\n",
      "\n",
      "    accuracy                           1.00       160\n",
      "   macro avg       1.00      1.00      1.00       160\n",
      "weighted avg       1.00      1.00      1.00       160\n",
      "\n",
      "------------fold no---------5----------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at uer/roberta-base-finetuned-dianping-chinese were not used when initializing BertModel: ['classifier.bias', 'classifier.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 4 | Train Loss:  0.149                 | Train Accuracy:  0.875                 | Val Loss:  0.219                 | Val Accuracy:  0.850\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 5 | Train Loss:  0.111                 | Train Accuracy:  0.898                 | Val Loss:  0.178                 | Val Accuracy:  0.875\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 6 | Train Loss:  0.088                 | Train Accuracy:  0.920                 | Val Loss:  0.144                 | Val Accuracy:  0.900\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.04it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 7 | Train Loss:  0.067                 | Train Accuracy:  0.935                 | Val Loss:  0.136                 | Val Accuracy:  0.906\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.04it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 8 | Train Loss:  0.056                 | Train Accuracy:  0.945                 | Val Loss:  0.115                 | Val Accuracy:  0.919\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.04it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 9 | Train Loss:  0.032                 | Train Accuracy:  0.963                 | Val Loss:  0.095                 | Val Accuracy:  0.944\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 43%|████▎     | 206/480 [00:25<00:34,  7.95it/s]IOPub message rate exceeded.\n",
      "The Jupyter server will temporarily stop sending output\n",
      "to the client in order to avoid crashing it.\n",
      "To change this limit, set the config variable\n",
      "`--ServerApp.iopub_msg_rate_limit`.\n",
      "\n",
      "Current values:\n",
      "ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n",
      "ServerApp.rate_limit_window=3.0 (secs)\n",
      "\n",
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 18 | Train Loss:  0.006                 | Train Accuracy:  0.994                 | Val Loss:  0.031                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 19 | Train Loss:  0.006                 | Train Accuracy:  0.996                 | Val Loss:  0.029                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 20 | Train Loss:  0.006                 | Train Accuracy:  0.999                 | Val Loss:  0.031                 | Val Accuracy:  0.981\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 21 | Train Loss:  0.002                 | Train Accuracy:  1.000                 | Val Loss:  0.029                 | Val Accuracy:  0.988\n",
      "fold: 5: \n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        13\n",
      "           1       1.00      1.00      1.00        95\n",
      "           2       1.00      1.00      1.00        52\n",
      "\n",
      "    accuracy                           1.00       160\n",
      "   macro avg       1.00      1.00      1.00       160\n",
      "weighted avg       1.00      1.00      1.00       160\n",
      "\n",
      "------------fold no---------6----------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at uer/roberta-base-finetuned-dianping-chinese were not used when initializing BertModel: ['classifier.bias', 'classifier.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 2 | Train Loss:  0.500                 | Train Accuracy:  0.480                 | Val Loss:  0.514                 | Val Accuracy:  0.400\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 3 | Train Loss:  0.347                 | Train Accuracy:  0.660                 | Val Loss:  0.426                 | Val Accuracy:  0.625\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 4 | Train Loss:  0.212                 | Train Accuracy:  0.831                 | Val Loss:  0.268                 | Val Accuracy:  0.850\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 5 | Train Loss:  0.103                 | Train Accuracy:  0.931                 | Val Loss:  0.147                 | Val Accuracy:  0.919\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 6 | Train Loss:  0.051                 | Train Accuracy:  0.952                 | Val Loss:  0.114                 | Val Accuracy:  0.944\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.99it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 7 | Train Loss:  0.037                 | Train Accuracy:  0.969                 | Val Loss:  0.086                 | Val Accuracy:  0.944\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.97it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 8 | Train Loss:  0.019                 | Train Accuracy:  0.976                 | Val Loss:  0.074                 | Val Accuracy:  0.956\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 9 | Train Loss:  0.017                 | Train Accuracy:  0.989                 | Val Loss:  0.077                 | Val Accuracy:  0.950\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 10 | Train Loss:  0.026                 | Train Accuracy:  0.965                 | Val Loss:  0.059                 | Val Accuracy:  0.963\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 11 | Train Loss:  0.010                 | Train Accuracy:  0.982                 | Val Loss:  0.057                 | Val Accuracy:  0.969\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 12 | Train Loss:  0.015                 | Train Accuracy:  0.974                 | Val Loss:  0.055                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 13 | Train Loss:  0.011                 | Train Accuracy:  0.977                 | Val Loss:  0.050                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 14 | Train Loss:  0.011                 | Train Accuracy:  0.973                 | Val Loss:  0.052                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 15 | Train Loss:  0.012                 | Train Accuracy:  0.976                 | Val Loss:  0.045                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.96it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 16 | Train Loss:  0.009                 | Train Accuracy:  0.982                 | Val Loss:  0.043                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 17 | Train Loss:  0.007                 | Train Accuracy:  0.982                 | Val Loss:  0.043                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 18 | Train Loss:  0.007                 | Train Accuracy:  0.983                 | Val Loss:  0.042                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 19 | Train Loss:  0.008                 | Train Accuracy:  0.978                 | Val Loss:  0.040                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 20 | Train Loss:  0.009                 | Train Accuracy:  0.975                 | Val Loss:  0.045                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 21 | Train Loss:  0.004                 | Train Accuracy:  0.985                 | Val Loss:  0.041                 | Val Accuracy:  0.975\n",
      "fold: 6: \n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        13\n",
      "           1       1.00      1.00      1.00        95\n",
      "           2       1.00      1.00      1.00        52\n",
      "\n",
      "    accuracy                           1.00       160\n",
      "   macro avg       1.00      1.00      1.00       160\n",
      "weighted avg       1.00      1.00      1.00       160\n",
      "\n",
      "------------fold no---------7----------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at uer/roberta-base-finetuned-dianping-chinese were not used when initializing BertModel: ['classifier.bias', 'classifier.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
      "100%|██████████| 480/480 [00:59<00:00,  8.05it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 2 | Train Loss:  0.485                 | Train Accuracy:  0.503                 | Val Loss:  0.512                 | Val Accuracy:  0.431\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 3 | Train Loss:  0.384                 | Train Accuracy:  0.622                 | Val Loss:  0.469                 | Val Accuracy:  0.519\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 4 | Train Loss:  0.298                 | Train Accuracy:  0.684                 | Val Loss:  0.421                 | Val Accuracy:  0.531\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.97it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 5 | Train Loss:  0.213                 | Train Accuracy:  0.758                 | Val Loss:  0.363                 | Val Accuracy:  0.700\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 6 | Train Loss:  0.188                 | Train Accuracy:  0.865                 | Val Loss:  0.282                 | Val Accuracy:  0.856\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 7 | Train Loss:  0.160                 | Train Accuracy:  0.915                 | Val Loss:  0.166                 | Val Accuracy:  0.912\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 8 | Train Loss:  0.154                 | Train Accuracy:  0.948                 | Val Loss:  0.129                 | Val Accuracy:  0.931\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 9 | Train Loss:  0.129                 | Train Accuracy:  0.972                 | Val Loss:  0.103                 | Val Accuracy:  0.956\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 10 | Train Loss:  0.109                 | Train Accuracy:  0.977                 | Val Loss:  0.092                 | Val Accuracy:  0.956\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 11 | Train Loss:  0.109                 | Train Accuracy:  0.979                 | Val Loss:  0.087                 | Val Accuracy:  0.950\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 12 | Train Loss:  0.114                 | Train Accuracy:  0.981                 | Val Loss:  0.082                 | Val Accuracy:  0.956\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.97it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 13 | Train Loss:  0.084                 | Train Accuracy:  0.988                 | Val Loss:  0.058                 | Val Accuracy:  0.956\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.98it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 14 | Train Loss:  0.018                 | Train Accuracy:  0.983                 | Val Loss:  0.048                 | Val Accuracy:  0.963\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 15 | Train Loss:  0.012                 | Train Accuracy:  0.991                 | Val Loss:  0.046                 | Val Accuracy:  0.969\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 16 | Train Loss:  0.009                 | Train Accuracy:  0.996                 | Val Loss:  0.046                 | Val Accuracy:  0.969\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 17 | Train Loss:  0.005                 | Train Accuracy:  0.998                 | Val Loss:  0.043                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 18 | Train Loss:  0.008                 | Train Accuracy:  0.993                 | Val Loss:  0.040                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.98it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 19 | Train Loss:  0.007                 | Train Accuracy:  0.991                 | Val Loss:  0.039                 | Val Accuracy:  0.975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 20 | Train Loss:  0.005                 | Train Accuracy:  0.993                 | Val Loss:  0.041                 | Val Accuracy:  0.969\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 21 | Train Loss:  0.004                 | Train Accuracy:  0.991                 | Val Loss:  0.039                 | Val Accuracy:  0.975\n",
      "fold: 7: \n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        13\n",
      "           1       1.00      1.00      1.00        95\n",
      "           2       1.00      1.00      1.00        52\n",
      "\n",
      "    accuracy                           1.00       160\n",
      "   macro avg       1.00      1.00      1.00       160\n",
      "weighted avg       1.00      1.00      1.00       160\n",
      "\n",
      "------------fold no---------8----------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at uer/roberta-base-finetuned-dianping-chinese were not used when initializing BertModel: ['classifier.bias', 'classifier.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
      "100%|██████████| 480/480 [01:00<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 2 | Train Loss:  0.500                 | Train Accuracy:  0.558                 | Val Loss:  0.472                 | Val Accuracy:  0.681\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 3 | Train Loss:  0.357                 | Train Accuracy:  0.810                 | Val Loss:  0.413                 | Val Accuracy:  0.756\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 4 | Train Loss:  0.263                 | Train Accuracy:  0.881                 | Val Loss:  0.325                 | Val Accuracy:  0.806\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 5 | Train Loss:  0.142                 | Train Accuracy:  0.938                 | Val Loss:  0.211                 | Val Accuracy:  0.881\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 6 | Train Loss:  0.062                 | Train Accuracy:  0.967                 | Val Loss:  0.151                 | Val Accuracy:  0.906\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 7 | Train Loss:  0.032                 | Train Accuracy:  0.982                 | Val Loss:  0.123                 | Val Accuracy:  0.919\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 8 | Train Loss:  0.023                 | Train Accuracy:  0.984                 | Val Loss:  0.107                 | Val Accuracy:  0.944\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 4 | Train Loss:  0.263                 | Train Accuracy:  0.830                 | Val Loss:  0.355                 | Val Accuracy:  0.750\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.99it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 5 | Train Loss:  0.177                 | Train Accuracy:  0.838                 | Val Loss:  0.282                 | Val Accuracy:  0.819\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 6 | Train Loss:  0.128                 | Train Accuracy:  0.896                 | Val Loss:  0.238                 | Val Accuracy:  0.856\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.97it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 7 | Train Loss:  0.078                 | Train Accuracy:  0.950                 | Val Loss:  0.188                 | Val Accuracy:  0.887\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 8 | Train Loss:  0.059                 | Train Accuracy:  0.955                 | Val Loss:  0.147                 | Val Accuracy:  0.900\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.95it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 9 | Train Loss:  0.046                 | Train Accuracy:  0.964                 | Val Loss:  0.114                 | Val Accuracy:  0.912\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 10 | Train Loss:  0.022                 | Train Accuracy:  0.988                 | Val Loss:  0.072                 | Val Accuracy:  0.938\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 11 | Train Loss:  0.013                 | Train Accuracy:  0.994                 | Val Loss:  0.063                 | Val Accuracy:  0.938\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  8.00it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 12 | Train Loss:  0.015                 | Train Accuracy:  0.991                 | Val Loss:  0.055                 | Val Accuracy:  0.950\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 13 | Train Loss:  0.011                 | Train Accuracy:  0.988                 | Val Loss:  0.040                 | Val Accuracy:  0.969\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 14 | Train Loss:  0.009                 | Train Accuracy:  0.995                 | Val Loss:  0.032                 | Val Accuracy:  0.981\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 15 | Train Loss:  0.008                 | Train Accuracy:  0.994                 | Val Loss:  0.026                 | Val Accuracy:  0.981\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 16 | Train Loss:  0.006                 | Train Accuracy:  0.993                 | Val Loss:  0.023                 | Val Accuracy:  0.981\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.96it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 17 | Train Loss:  0.006                 | Train Accuracy:  0.997                 | Val Loss:  0.017                 | Val Accuracy:  0.981\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.99it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 18 | Train Loss:  0.005                 | Train Accuracy:  0.996                 | Val Loss:  0.015                 | Val Accuracy:  0.981\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 19 | Train Loss:  0.003                 | Train Accuracy:  0.997                 | Val Loss:  0.013                 | Val Accuracy:  0.988\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [00:59<00:00,  8.02it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 20 | Train Loss:  0.004                 | Train Accuracy:  0.997                 | Val Loss:  0.010                 | Val Accuracy:  0.994\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 480/480 [01:00<00:00,  7.97it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs: 21 | Train Loss:  0.005                 | Train Accuracy:  0.997                 | Val Loss:  0.011                 | Val Accuracy:  0.988\n",
      "fold: 9: \n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        13\n",
      "           1       1.00      1.00      1.00        95\n",
      "           2       1.00      1.00      1.00        52\n",
      "\n",
      "    accuracy                           1.00       160\n",
      "   macro avg       1.00      1.00      1.00       160\n",
      "weighted avg       1.00      1.00      1.00       160\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import collections\n",
    "history = collections.defaultdict(list)\n",
    "\n",
    "EPOCHS = 20\n",
    "LR = 1e-6\n",
    "\n",
    "np.random.seed(112)\n",
    "\n",
    "########## TODO: random labeled############\n",
    "# sample_df['category'] = np.random.randint(0,4, size=len(sample_df))\n",
    "\n",
    "# print(len(df_train), len(df_val), len(df_test))\n",
    "\n",
    "un_P_df = sample_df[sample_df['category']!='P']\n",
    "\n",
    "from sklearn.model_selection import KFold, StratifiedShuffleSplit, StratifiedKFold\n",
    "kfold = KFold(n_splits=10,shuffle=True,random_state=42)\n",
    "\n",
    "best_model = None\n",
    "best_optimizer = None\n",
    "best_epoch = None\n",
    "best_val_loss = float('inf')\n",
    "best_true = None\n",
    "best_pred = None\n",
    "for fold,(train_idx,test_idx) in enumerate(kfold.split(sample_df)):\n",
    "    print('------------fold no---------{}----------------------'.format(fold))\n",
    "\n",
    "    model = BertClassifier()\n",
    "    \n",
    "    train_df = pd.concat([sample_df.iloc[train_idx], un_P_df])\n",
    "    val_df = pd.concat([sample_df.iloc[test_idx], un_P_df])\n",
    "    best_model_, best_optimizer_, best_epoch_, best_val_loss_, best_true_, best_pred_ = train(model, train_df.reset_index(drop=True), val_df.reset_index(drop=True), LR, EPOCHS)\n",
    "    if best_val_loss > best_val_loss_:\n",
    "        best_val_loss = best_val_loss_\n",
    "        best_model = best_model_\n",
    "        best_optimizer = best_optimizer_\n",
    "        best_epoch = best_epoch_\n",
    "        best_true = best_true_\n",
    "        best_pred = best_pred_\n",
    "        # save model\n",
    "        torch.save({\n",
    "            'model': best_model.state_dict(),\n",
    "            'optimizer': best_optimizer.state_dict(),\n",
    "            'epoch': best_epoch,\n",
    "            'fold': fold,\n",
    "        }, f'./model/bert_best_model.pth')\n",
    "    print(f\"fold: {fold}: \\n{classification_report(best_true, best_pred)}\")\n",
    "    history['pred'].append(best_pred)\n",
    "    history['true'].append(best_true)\n",
    "torch.save({'history': history}, f'./model/history.pth')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "reports = []\n",
    "for i in range(10):\n",
    "    reports.append(classification_report(history['true'][i], history['pred'][i], output_dict=True))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>precision</th>\n",
       "      <th>recall</th>\n",
       "      <th>f1-score</th>\n",
       "      <th>support</th>\n",
       "      <th>type</th>\n",
       "      <th>fold</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.979381</td>\n",
       "      <td>0.989583</td>\n",
       "      <td>97</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.979381</td>\n",
       "      <td>0.989583</td>\n",
       "      <td>97</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.989247</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.994595</td>\n",
       "      <td>92</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>95</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>95</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>95</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>95</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>95</td>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>95</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>95</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.960784</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.980000</td>\n",
       "      <td>49</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.960784</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.980000</td>\n",
       "      <td>49</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.981132</td>\n",
       "      <td>0.990476</td>\n",
       "      <td>53</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>52</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>52</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>52</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>52</td>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>52</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>52</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>52</td>\n",
       "      <td>2</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.987990</td>\n",
       "      <td>0.987500</td>\n",
       "      <td>0.987560</td>\n",
       "      <td>160</td>\n",
       "      <td>weighted avg</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.987990</td>\n",
       "      <td>0.987500</td>\n",
       "      <td>0.987560</td>\n",
       "      <td>160</td>\n",
       "      <td>weighted avg</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.993817</td>\n",
       "      <td>0.993750</td>\n",
       "      <td>0.993737</td>\n",
       "      <td>160</td>\n",
       "      <td>weighted avg</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>160</td>\n",
       "      <td>weighted avg</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>160</td>\n",
       "      <td>weighted avg</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>160</td>\n",
       "      <td>weighted avg</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>160</td>\n",
       "      <td>weighted avg</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>160</td>\n",
       "      <td>weighted avg</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>160</td>\n",
       "      <td>weighted avg</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>160</td>\n",
       "      <td>weighted avg</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   precision    recall  f1-score  support          type  fold\n",
       "0   1.000000  1.000000  1.000000       14             0     1\n",
       "1   1.000000  1.000000  1.000000       14             0     2\n",
       "2   1.000000  1.000000  1.000000       15             0     3\n",
       "3   1.000000  1.000000  1.000000       13             0     4\n",
       "4   1.000000  1.000000  1.000000       13             0     5\n",
       "5   1.000000  1.000000  1.000000       13             0     6\n",
       "6   1.000000  1.000000  1.000000       13             0     7\n",
       "7   1.000000  1.000000  1.000000       13             0     8\n",
       "8   1.000000  1.000000  1.000000       13             0     9\n",
       "9   1.000000  1.000000  1.000000       13             0    10\n",
       "0   1.000000  0.979381  0.989583       97             1     1\n",
       "1   1.000000  0.979381  0.989583       97             1     2\n",
       "2   0.989247  1.000000  0.994595       92             1     3\n",
       "3   1.000000  1.000000  1.000000       95             1     4\n",
       "4   1.000000  1.000000  1.000000       95             1     5\n",
       "5   1.000000  1.000000  1.000000       95             1     6\n",
       "6   1.000000  1.000000  1.000000       95             1     7\n",
       "7   1.000000  1.000000  1.000000       95             1     8\n",
       "8   1.000000  1.000000  1.000000       95             1     9\n",
       "9   1.000000  1.000000  1.000000       95             1    10\n",
       "0   0.960784  1.000000  0.980000       49             2     1\n",
       "1   0.960784  1.000000  0.980000       49             2     2\n",
       "2   1.000000  0.981132  0.990476       53             2     3\n",
       "3   1.000000  1.000000  1.000000       52             2     4\n",
       "4   1.000000  1.000000  1.000000       52             2     5\n",
       "5   1.000000  1.000000  1.000000       52             2     6\n",
       "6   1.000000  1.000000  1.000000       52             2     7\n",
       "7   1.000000  1.000000  1.000000       52             2     8\n",
       "8   1.000000  1.000000  1.000000       52             2     9\n",
       "9   1.000000  1.000000  1.000000       52             2    10\n",
       "0   0.987990  0.987500  0.987560      160  weighted avg     1\n",
       "1   0.987990  0.987500  0.987560      160  weighted avg     2\n",
       "2   0.993817  0.993750  0.993737      160  weighted avg     3\n",
       "3   1.000000  1.000000  1.000000      160  weighted avg     4\n",
       "4   1.000000  1.000000  1.000000      160  weighted avg     5\n",
       "5   1.000000  1.000000  1.000000      160  weighted avg     6\n",
       "6   1.000000  1.000000  1.000000      160  weighted avg     7\n",
       "7   1.000000  1.000000  1.000000      160  weighted avg     8\n",
       "8   1.000000  1.000000  1.000000      160  weighted avg     9\n",
       "9   1.000000  1.000000  1.000000      160  weighted avg    10"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_0_df = pd.DataFrame(map(lambda x: x['0'], reports))\n",
    "_0_df['type'] = '0'\n",
    "_0_df['fold'] = range(1, 11)\n",
    "_1_df = pd.DataFrame(map(lambda x: x['1'], reports))\n",
    "_1_df['type'] = '1'\n",
    "_1_df['fold'] = range(1, 11)\n",
    "_2_df = pd.DataFrame(map(lambda x: x['2'], reports))\n",
    "_2_df['type'] = '2'\n",
    "_2_df['fold'] = range(1, 11)\n",
    "_weighted_avg_df = pd.DataFrame(map(lambda x: x['weighted avg'], reports))\n",
    "_weighted_avg_df['type'] = 'weighted avg'\n",
    "_weighted_avg_df['fold'] = range(1, 11)\n",
    "reports_df = pd.concat([_0_df, _1_df, _2_df, _weighted_avg_df])\n",
    "reports_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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888/r4iIiDrbPvnkkyaOBUCSiqqKteLnDzWm0yjFt4uzOg4AAADaoAYXjQ8//HBz5gBwCPmVBfoud6NGJg6zOgoAAADaqAYXjcOG8aEV8LVekT300Og5VscAAABAG9bgaxpramr05JNPauzYsRowYIDGjh2rJ598Ui6XqznzAW3am9vf1drMr2UzGvxWBQAAAJpUo6anbtq0SXfffbcSExOVmZmpBQsWqKysTHfccUdzZgTaJNM0lVGWKZuNghEAAADWaXDRuHLlSi1dulSRkZGSpO7du+u4445TamoqRSPQDAzD0M0nzLA6BgAAANq4Bg9hmKbZqOcBHJtvc77Xcz8sVpW72uooAAAAaMMaXDROmDBB11xzjT7//HPt3LlTn332ma677jqdddZZzZkPaLOq3FUqqtqvQHuA1VEAAADQhhlmA4cKXS6XFi5cqLS0NOXm5io2NlZnn322rr32WgUEtPwPtQUFZfJ6GTVt7WJiwpSXV2p1DKBe9FH4O/oo/B19FP7OH/uozWYoOjq03u0NLhpbO4rGtsEf36SHUumu0mPfLdSk7uM1oMNxVseBD7WUPoq2iz4Kf0cfhb/zxz56pKLxsAvhfPPNNzrxxBMlSevWrau33YgRI44yHoBDqaipUPuAcKamAgAAwHKHLRrvvvtupaWlSZLuvPPOQ7YxDEMffvhh0ycD2rDo4ChdN+hKq2MAAAAAhy8afy0YJemjjz5q9jAADnjpx9dlM2y67LgLrI4CAACANq7B92n8vS+//FJ2u712+iqAphMT0kGG1SEAAAAANeKWG5dcconWr18vSXr22Wd1yy236JZbbtGiRYuaLRzQFnlNryZ2HaeJ3c6wOgoAAADQ8KJxx44dGjRokCRpyZIlWrx4sd544w3961//aq5sQJv0fd5m3bn2PuVW5FkdBQAAAGj49FSv1yvDMLRnzx6ZpqmePXtKkvbv399s4YC2qH1AuPpE9VJkUKTVUQAAAICGF41DhgzRPffco7y8PJ1xxoFpc3v27FFkJB9sgabUKayjph13odUxAAAAAEmNmJ76wAMPKDw8XH369NH1118vSdq1a5cuu+yyZgsHtDUer0cz19ytFbu5jQ0AAAD8Q4NHGiMjI3XLLbfUee60005r8IF2796tmTNnqri4WBEREZo3b566du1ap01eXp5mzZqljIwMud1uzZgxQ6mpqZKkgoIC3X777crKypLb7dbw4cN11113yeFwyOPx6L777tPnn38uwzB09dVXa8qUKQ3OBvgLt+nRuM6nqkdEV6ujAAAAAJKOUDQuXLhQ11xzjSTpiSeeqLfdTTfddMQDzZ49W1OnTlVqaqqWLl2qWbNmafHixXXaPPjgg+rfv78WLlyowsJCnXvuuRo2bJgSEhK0aNEi9ejRQ88++6xqamo0depUrVq1ShMnTtSyZcu0Z88erVq1SsXFxZo8ebJGjBihpKSkhvwOAL/h8bo1vssY2W12q6MAAAAAko4wPTU7O7vOz/X9dyQFBQVKT09XSkqKJCklJUXp6ekqLCys027r1q0aPXq0JCkqKkp9+/bVihUrJEmGYai8vFxer1cul0s1NTWKi4uTJC1fvlxTpkyRzWZTVFSUxo0bp5UrVzbi1wD4h3d+ek+z182TaZpWRwEAAAAkHWGk8e677679+YEHHjjqg2RlZSkuLk52+4HRE7vdrtjYWGVlZSkqKqq2Xb9+/bR8+XINGDBAGRkZ2rBhQ+1o4bXXXqsbbrhBo0aNUmVlpS6++GINGTKkdv+JiYm1+0lISGhQMftb0dGhR31+aFliYsKsjlCv09zD1a+8l2Jjw62OAgv5cx8FJPoo/B99FP6upfXRBl/T+J///Ed9+/ZV3759a5/bunWrtm7dqsmTJzdJmJkzZ+r+++9XamqqEhMTNWLEiNpCc+XKlerTp49efvlllZeXa/r06Vq5cqUmTJjQJMcuKCiT18voTmsXExOmvLxSq2McUo2nRkE1oTo+vJPfZkTz8+c+Ckj0Ufg/+ij8nT/2UZvNOOwgWoNXT33iiSeUkJBQ57n4+PjDXuv4q4SEBOXk5Mjj8UiSPB6PcnNzD9pfVFSU5s+fr3fffVeLFi1SeXl57f0gX3nlFZ1zzjmy2WwKCwvTmDFj9NVXX9XuPzMzs3Y/WVlZio+Pb+ipAX5hd8kezVr3oLYUbrc6CgAAAFCrwUVjWVmZQkPrVp9hYWEqKSk54mujo6OVnJystLQ0SVJaWpqSk5PrTE2VpKKiIrndbknSunXrtH379trrIJOSkvTZZ59Jklwul9atW6devXpJkiZMmKAlS5bI6/WqsLBQq1ev1vjx4xt6aoBfiA3poAt6T1bX8E5WRwEAAABqNbho7NGjh95///06z33wwQfq0aNHg14/Z84cvfLKKxo/frxeeeWV2uslp0+frh9++EGStGnTJk2cOFETJkzQk08+qUWLFik4OFiSdMcdd2j9+vWaNGmSJk+erK5du+r888+XJKWmpiopKUlnnnmmzj//fF133XXq1IkP3mhZylzlGho3WCHOEKujAAAAALUMs4HLNH777be6+uqrNXLkSHXq1El79uzRunXr9Oyzz9YuSNOScU1j2+CPc8h/dcea+9Qrsrsu7zfV6iiwkD/3UUCij8L/0Ufh7/yxjzbZNY1Dhw7VsmXLNGDAAFVWVmrgwIFKS0trFQUjYDXTNHXpcefr9E6jrI4CAAAA1NHg1VMlqWPHjrrqqquUn5+v2NjY5soEtDn5lYUKcQSrU1hHq6MAAAAAdTR4pLGkpER//vOfNXDgQJ155pmSpA8//FCPPfZYs4UD2oq1mV/pkfUL5PF6rI4CAAAA1NHgonH27NkKDQ3VRx99JKfTKUkaPHiwVqxY0WzhgLbitE4jdc3Ay+W0O62OAgAAANTR4Omp69at0+effy6n0ynDMCQduK9iQUFBs4UD2gKv6dVPRbvUK7Kn1VEAAACAgzR4pDEsLExFRUV1nsvMzFRMTEyThwLakqzyHL2Y/rq2Fe2wOgoAAABwkAYXjVOmTNGNN96oL7/8Ul6vVxs2bNBtt92mCy+8sDnzAa1efEisZp54k/pF97U6CgAAAHCQBk9PnT59ugIDA3XPPffI7Xbrjjvu0AUXXKBp06Y1Zz6g1Usv3KZAe6DaOUOsjgIAAAAcpEFFo8fj0R133KF7772XIhFoYst2va/wgDD1juxhdRQAAADgIA0qGu12u9auXVu7AA6ApvP/TrhGFTUVVscAAAAADqnB1zROmzZNTz31lFwuV3PmAdqUrPIcfZW1XsGOIKujAAAAAIfU4GsaX3nlFeXn5+vFF19UVFSUDMOQaZoyDEOffPJJM0YEWq+thTv05o53NSTueKujAAAAAIfU4KLx4Ycfbs4cQJt0WtJIDY4doLCAUKujAAAAAIfU4KJx0KBBWrhwod577z3l5uYqNjZWEydO1DXXXNOc+YBWbdmu93VcdB9FBLa3OgoAAABwSA0uGufMmaPdu3frzjvvVMeOHbVv3z79/e9/V05Ojh544IHmzAi0SuU1Ffp47+cKCwhVz4huVscBAAAADqnBReOHH36oDz74QOHh4ZKknj176vjjj9eZZ57ZbOGA1qydM0TzT7lHHtNrdRQAAACgXg1ePbVDhw6qrKys81x1dbViYmKaPBTQFqzL+larfvlEAXan1VEAAACAejV4pDE1NVVXXXWVLr30UsXFxSk7O1uvvvqqUlNTtW7dutp2I0aMaJagQGuzq3i3MstzdFa3sVZHAQAAAOplmKZpNqThmDFjjrwzw9CHH354zKGsUFBQJq+3Qb8KtGAxMWHKyyu1OkYtj9cju81udQz4EX/ro8Dv0Ufh7+ij8Hf+2EdtNkPR0fWv5t/gkcaPPvqoSQIBkHLKc/Xe7g80sds4xbeLszoOAAAAUK8GX9MIoOkUVe/Xzv0/y5BhdRQAAADgsBo80gig6fSN6qW5I+9UA2eHAwAAAJZhpBGwwEs/vq7PMr6QYTDSCAAAAP9G0Qj4mNf0qtRVpip3tdVRAAAAgCNieirgYzbDphsGT7c6BgAAANAgjDQCPvb5vnV6asNzqvG6rY4CAAAAHBFFI+BjNtnksNnltDHQDwAAAP/Hp1bAx0Z2HK6RHYdbHQMAAABoEEYaAR/aX12qv33xgDbnb7E6CgAAANAgFI2AD7k8LnUJ76TwgDCrowAAAAANwvRUwIeigyN1Vf9LrI4BAAAANBgjjYAPLdj4D7304+tWxwAAAAAajJFGwId6R/RQgCPA6hgAAABAg1E0Aj7i9ro1rsupshkM8AMAAKDl4NMr4CPfZG/QXz+brcKqIqujAAAAAA1G0Qj4SFy7WJ2UMFQRge2tjgIAAAA0GNNTAR+JDe6gKb1TrY4BAAAANAojjYAPuDwu3b72Xr3/80dWRwEAAAAahZFGwAe8pld/6Hm2erTvanUUAAAAoFEoGgEfqPJUa2TicAXaud0GAAAAWhampwI+8NaOZbr/q0etjgEAAAA0ms9GGnfv3q2ZM2equLhYERERmjdvnrp27VqnTV5enmbNmqWMjAy53W7NmDFDqakHFg659dZbtW3bttq227Zt0zPPPKOxY8fqqaee0muvvabY2FhJ0gknnKDZs2f76tSAIxrdcYRKY0qtjgEAAAA0ms+KxtmzZ2vq1KlKTU3V0qVLNWvWLC1evLhOmwcffFD9+/fXwoULVVhYqHPPPVfDhg1TQkKCHnroodp2W7du1bRp0zR69Oja5yZPnqzbbrvNV6cDNFiVu0rtnCHqGdHN6igAAABAo/lkempBQYHS09OVkpIiSUpJSVF6eroKCwvrtNu6dWttIRgVFaW+fftqxYoVB+3vzTff1KRJkxQQwPVh8H/bi3bq/q8f0679v1gdBQAAAGg0n4w0ZmVlKS4uTna7XZJkt9sVGxurrKwsRUVF1bbr16+fli9frgEDBigjI0MbNmxQUlJSnX25XC4tW7ZML730Up3n33vvPa1Zs0YxMTG64YYbNHjw4EZljI4OPbqTQ4sTExPm0+MNCTtO14f8SSck9VWggy86cGS+7qNAY9FH4e/oo/B3La2P+tXqqTNnztT999+v1NRUJSYmasSIEbWF5q9Wr16txMREJScn1z534YUXasaMGXI6nVq7dq2uvfZaLV++XJGRkQ0+dkFBmbxes8nOBf4pJiZMeXm+vbbwp+KflRicpJKiaknVPj02Wh4r+ijQGPRR+Dv6KPydP/ZRm8047CCaT6anJiQkKCcnRx6PR5Lk8XiUm5urhISEOu2ioqI0f/58vfvuu1q0aJHKy8vVs2fPOm3eeustnXfeeXWei4mJkdPplCSNHDlSCQkJ2rFjRzOeEdAwXtOrRZte1PKfV1sdBQAAADgqPikao6OjlZycrLS0NElSWlqakpOT60xNlaSioiK53W5J0rp167R9+/ba6yAlKTs7W+vXr9ekSZPqvC4nJ6f25y1btmjfvn3q1o1FR+Afrjv+Kp2WNNLqGAAAAMBR8dn01Dlz5mjmzJlasGCBwsPDNW/ePEnS9OnTdeONN2rAgAHatGmT5s6dK5vNpsjISC1atEjBwcG1+3jnnXd0+umnq3379nX2/eijj+rHH3+UzWaT0+nUQw89pJiYGF+dGlCvrPIc1Xhd6hKSdOTGAAAAgB8yTNPkQj5xTWNb4es55P/a9o6+yf5OD59yt2yGTwb20cL543UOwG/RR+Hv6KPwd/7YR490TaNfLYQDtDaTuo/XSQlDKBgBAADQYvFJFmgmLk+NvsvdpPYB4VZHAQAAAI4aRSPQTDLK9ulf297WntJ9VkcBAAAAjhrTU4Fm0i28i+acdJvCAuqfHw4AAAD4O0YagWbyTc4G5VbmKcgRaHUUAAAA4KhRNALNZOXPH2ld5jdWxwAAAACOCdNTgWZyx7CbVemusjoGAAAAcEwYaQSawS8le7V6z6eyG3arowAAAADHhKIRaAY7i3frvd0fyG6jaAQAAEDLxvRUoBmM6XyKTk4cpkB7gNVRAAAAgGPCSCPQxLymV69tfUt7uT8jAAAAWgGKRqCJlbhKtTFvs/IqC62OAgAAABwzpqcCTSwisL0eHDVLXtNrdRQAAADgmDHSCDSxj/Z8prTdq1gEBwAAAK0CI41AE8uuyFVxdYnVMQAAAIAmQdEINLGpff8o0zStjgEAAAA0CaanAk1oT0mGFm78h3Ir8qyOAgAAADQJikagCZXXVCi/qkiBjkCrowAAAABNgumpQBNKju6tv0X/2eoYAAAAQJNhpBFoQk9//7w+2bvW6hgAAABAk6FoBJqIx+tRgM0pB7faAAAAQCvC9FSgidhtdl09cJrVMQAAAIAmxUgj0ERW/vyRHln/jLym1+ooAAAAQJOhaASaSHhAmGKDY2QzeFsBAACg9WB6KtAETNPUiIShOjnxRKujAAAAAE2KIRGgCeRV5uu2NXfrx4JtVkcBAAAAmhRFI9AkDB3foZ86BEVaHQQAAABoUkxPBZpAZFCELk6eYnUMAAAAoMkx0gg0gce+W6gXf3zN6hgAAABAk2OkEWgCQ+MGKdTZzuoYAAAAQJOjaASOUbXHpdGJJ8lpd1odBQAAAGhyTE8FjtEXmV/rz5/NUqmrzOooAAAAQJOjaASOUff2XTSh6xiFBYRaHQUAAABochSNwDFq5wzRhK5jrY4BAAAANAuKRuAYlNWUa/a6efpo7+dWRwEAAACaBQvhAMfAbth1cd8p6t6+s9VRAAAAgGZB0Qgcg1JXqQZ0SOZ6RgAAALRaTE8FjsGS7e/qiQ1/tzoGAAAA0GwYaQSOwcRuZ6jSXWl1DAAAAKDZMNIIHKWymnJ5Ta96RfawOgoAAADQbCgagaO0pWC7Hv1ugXLKc62OAgAAADQbn01P3b17t2bOnKni4mJFRERo3rx56tq1a502eXl5mjVrljIyMuR2uzVjxgylpqZKkm699VZt27attu22bdv0zDPPaOzYsfJ4PLrvvvv0+eefyzAMXX311ZoyZYqvTg1t1HHRfXT1gGlKaBdndRQAAACg2fisaJw9e7amTp2q1NRULV26VLNmzdLixYvrtHnwwQfVv39/LVy4UIWFhTr33HM1bNgwJSQk6KGHHqptt3XrVk2bNk2jR4+WJC1btkx79uzRqlWrVFxcrMmTJ2vEiBFKSkry1emhDdq1/2d1DI2X3Wa3OgoAAADQbHwyPbWgoEDp6elKSUmRJKWkpCg9PV2FhYV12m3durW2EIyKilLfvn21YsWKg/b35ptvatKkSQoICJAkLV++XFOmTJHNZlNUVJTGjRunlStXNvNZoS2r8br1/A//1Gf71lkdBQAAAGhWPikas7KyFBcXJ7v9wIiM3W5XbGyssrKy6rTr16+fli9fLtM0tXfvXm3YsEGZmZl12rhcLi1btkznnXdenf0nJibWPk5ISFB2dnYznhHaOrth0+3DbtapHU+2OgoAAADQrPzqlhszZ87U/fffr9TUVCUmJmrEiBG1heavVq9ercTERCUnJzfpsaOjuTl7WxETE3bM+9iev0tVznL1Sxwgm8F6UmhaTdFHgeZEH4W/o4/C37W0PuqTojEhIUE5OTnyeDyy2+3yeDzKzc1VQkJCnXZRUVGaP39+7ePp06erZ8+eddq89dZbdUYZf91/ZmamBg4cKOngkceGKCgok9drNuo1aHliYsKUl1d6zPt5N/1DbSvcobkj75JhGE2QDDigqfoo0Fzoo/B39FH4O3/sozabcdhBNJ8MkURHRys5OVlpaWmSpLS0NCUnJysqKqpOu6KiIrndbknSunXrtH379trrICUpOztb69ev16RJk+q8bsKECVqyZIm8Xq8KCwu1evVqjR8/vpnPCm3ZRX3O042D/4+CEQAAAK2ez6anzpkzRzNnztSCBQsUHh6uefPmSTowmnjjjTdqwIAB2rRpk+bOnSubzabIyEgtWrRIwcHBtft45513dPrpp6t9+/Z19p2amqqNGzfqzDPPlCRdd9116tSpk69ODW1MRU2lvsj6WoNjBlodBQAAAGh2hmmazMkU01PbiqaYDrC96Cc9seFZ3TjoavWJ6nnkFwCN4I9TVoDfoo/C39FH4e/8sY8eaXqqXy2EA7QEvSN76sFRsxTkCLI6CgAAANDsWPYRaKRP9q7Vrv0/y2njOxcAAAC0fhSNQCN9mrFWm/LTrY4BAAAA+ARDJUAj/e2kv8jlcVkdAwAAAPAJRhqBRthW+JPe3bnS6hgAAACAz1A0Ao2wt2yf1mR+KafNaXUUAAAAwCeYngo0wrjOp+r0pFGy2+xWRwEAAAB8gpFGoIHcXree3/yKdu7fbXUUAAAAwGcoGoEG2l9dor2l+1RWU2F1FAAAAMBnmJ4KNFB0cJTuHnGbTNO0OgoAAADgM4w0Ag2Utut9/een5TIMw+ooAAAAgM8w0gg0UKmrTDVet9UxAAAAAJ+iaAQa6KK+51kdAQAAAPA5pqcCDbC9aKce+26hcivyrY4CAAAA+BRFI9AAbq9bbq9HYQHtrI4CAAAA+BTTU4EGOC66j46L7mN1DAAAAMDnGGkEjsA0Td3/9WP6eO8aq6MAAAAAPkfRCBxBjbdGHUMTFB4QanUUAAAAwOeYngocgdPm1LTjLrQ6BgAAgKU8HreKivLkdrusjtKi5eba5PV6LTm2zWZXcHCoQkPbN+re4xSNwBG889N72lG8U7cOvbFRby4AAIDWpKgoT0FBIWrXLp7PRMfA4bDJ7fZ90Wiapjwet0pLi1VUlKeoqNgGv5aiETiCxNAD/zDyjyMAAGjL3G4XBWMLZhiGHA6nIiKilZOT0ajXUjQCh+E1vToxbrDsNrvVUQAAACxHwdjyGYZNktmo17AQDnAYGWWZ+vNns7SlcLvVUQAAAABLUDQChxFkD9LojicpPqThc74BAACA1oSiETiMds4QndszRZFBEVZHAQAAQCP98Y+T9M03X1kdo8WjaAQO45H1C/RS+utWxwAAAAAsQ9EI1MM0TZ3eaZSGxB5vdRQAAAA00r33/k05Odm67bZbdMYZozVmzEi9+ea/6rSZNu1Cffrpx5KkUaOGasmSf2nKlFSdffZYPfPME3Xup5iWtlQXX/xHTZhwum655XplZ2f59HysRNEI1KPCXakhscdrYEw/q6MAAACgkf72t3sVFxevefMe1QcffK4775yj999fUbt9x47tysvL08knj6p97rPPPtYLLyzWCy+8qs8//1TvvfeuJOnzzz/RP//5oubOfVhpaR9o4MBBmjPnTh+fkXUoGoF6fL5vnW79fI4q3VVWRwEAAMAxGjXqFO3du0d79+6RJL3//nKNGXOGnE5nbZuLL56m8PD2io+P1/nnX6TVq9+XJP3nP2/r0kv/pK5du8nhcOiyy67Qjh3b2sxoI0UjUI9+0cma0jtVwY4gq6MAAADgGAUGBmrs2DO0atUKeb1erV79viZMmFinTWxsXO3P8fEJys/PkyTl5GTpiSce0YQJp2nChNM0ceIYmaaUl5fr03OwisPqAIA/Mk1TpunVyMRhVkcBAADAUTIMo87js85K0b33ztLAgccrKChI/fsPrLM9NzdH3bv3kCTl5GSrQ4cYSQeKycsuu0JnnnmWb4L7GUYagUMorCrWvG+f1NrMr62OAgAAgKMUGRmlzMx9tY/79x8ow7Dp6acf1/jxEw9q//rr/1RJSYlycrK1ZMnrGjPmDElSaup5+uc/X9SuXTslSWVlZfroo9W+OQk/QNEIHEI7Z7Cu7H+J+kcnWx0FAAAAR+nSS/+kl19+QRMmnKbXXvunJGnChInaufOnQ44ajhp1qq688lJdfvnFGjFilFJSUiVJp556ui6+eJrmzLlDZ555qi677AJ9+eVan56LlZieChxCXmWBOod1VHRwpNVRAAAAcJRGjz5No0efVue5uLh4DRhwvDp2TDqo/YgRIzVlyoWH3NeECWdrwoSzmyOm32OkETiEN7Yv1Us//uvIDQEAANBiVFVV6Z133tQ55/zB6igtCkUjcAgX9vmDzu3VNr9JAgAAaI2++mqdUlLGKSoqSmecMcHqOC0K01OB3ymu3q/i6hL1iuhmdRQAAAA0keHDR2j16jX1bl+z5lsfpmlZGGkEfueH/HQt2PiCSlylVkcBAAAALMdII/A7J8adoLiQWEUHRVkdBQAAALAcI43A72zM26zwgNCDbgYLAAAAtEUUjcBvVLqr9M8tb+i73E1WRwEAAAD8AtNTgd8IdgTp3pNvl91mtzoKAAAA4Bd8VjTu3r1bM2fOVHFxsSIiIjRv3jx17dq1Tpu8vDzNmjVLGRkZcrvdmjFjhlJTU2u3L1++XAsXLpRpmjIMQy+++KI6dOigp556Sq+99ppiY2MlSSeccIJmz57tq1NDK7KlYLtKa8p0Ytxgq6MAAADgCPbs+UVz587R/v371b59e911193q1Kmz1bFaHZ8VjbNnz9bUqVOVmpqqpUuXatasWVq8eHGdNg8++KD69++vhQsXqrCwUOeee66GDRumhIQE/fDDD3r66af18ssvKyYmRqWlpQoICKh97eTJk3Xbbbf56nTQSq3N+lr7yjI1LP4Eq6MAAADgCObPf0DnnjtF48dP1PvvL9fDD9+vJ59cZHWsVscnRWNBQYHS09P14osvSpJSUlJ07733qrCwUFFR/1uhcuvWrZo2bZokKSoqSn379tWKFSt0xRVX6KWXXtIVV1yhmJgYSVJYWJgvoqONuaLfVG61AQAAcARrf8jSmk1ZzbLvUQMTNHJAwhHbFRUVavv2rXrssWckSePGjddjjz2koqIiRUZGNku2tsonRWNWVpbi4uJktx+4Tsxutys2NlZZWVl1isZ+/fpp+fLlGjBggDIyMrRhwwYlJSVJknbu3KmkpCRdfPHFqqio0BlnnKFrrrmmdoXL9957T2vWrFFMTIxuuOEGDR7cuOmF0dGhTXS28HcxMYf+wqGocr9W/fSZTu82QjGhfCkB69TXRwF/QR+Fv6OPNo/cXJscjgPraNrthpproXm73ag9zuEUFOQqJiZWgYFOSZLDYVOHDjH/fT66ecI1kYacX3Oy2WyNep/41UI4M2fO1P3336/U1FQlJiZqxIgRtYWmx+PRtm3b9OKLL8rlcumqq65SYmKiJk+erAsvvFAzZsyQ0+nU2rVrde2112r58uWN+oahoKBMXq/ZXKcGPxETE6a8vEOPJKYX7NDb6SvUI6SHjMpAHycDDjhcHwX8AX0U/o4+2ny8Xq/cbq8k6aTj4nXScfHNdqxfj3P4NqZM8+C2Ho/ZoNdbxeGwWZ7P6/XWeZ/YbMZhB9F8UuImJCQoJydHHo9H0oECMDc3VwkJdYedo6KiNH/+fL377rtatGiRysvL1bNnT0lSYmKiJkyYoICAAIWGhmrs2LHatOnAbRFiYmLkdB74hmHkyJFKSEjQjh07fHFqaEWOi+6j+afco6TQRKujAAAA4Aji4uKUn59bp8bIz89TbGycxclaH58UjdHR0UpOTlZaWpokKS0tTcnJyXWmpkpSUVGR3G63JGndunXavn27UlJSJB24DnLNmjUyTVM1NTX68ssv1bdvX0lSTk5O7T62bNmiffv2qVu3br44NbQi7+3+QD8WbOV2GwAAAC1AZGSUevbsrdWr35ckrV79vnr16sP1jM3AZ9NT58yZo5kzZ2rBggUKDw/XvHnzJEnTp0/XjTfeqAEDBmjTpk2aO3eubDabIiMjtWjRIgUHB0uSzj77bG3evFkTJ06UzWbTqFGj9Mc//lGS9Oijj+rHH3+UzWaT0+nUQw89VLtgDtAQpmlqfc73So7qrSFxx1sdBwAAAA3w17/eofvum60XX3xeYWFh+tvf7rY6UqtkmKbJhXzimsa24kjXOXi8HkYaYSmuxYG/o4/C39FHm0929i+Kj+9idYwWzx+uafz939IvrmkE/N3GvM3617Z35DE9VkcBAAAA/ApFIyAptyJf6QXb5LQ5rY4CAAAA+BW/uuUGYJUzupymcZ1Prb3vJwAAAIADGGlEm1fprtJTG57T9qKdVkcBAAAA/A5FI9q8ElepymvK5TX99yawAAAAgFWYnoo2Ly4kRjOH3Wx1DAAAAMAvMdKINu/f297RWzuWWR0DAAAAjfD0049rypRzNGrUUO3a9ZPVcVo1ika0eYZhyBAL4AAAALQko0efpqefflbx8QlWR2n1mJ6KNu/83pOtjgAAAIBGOv74QVZHaDMoGtGmbcz7Uct3f6CrB0xTdHCk1XEAAABajIplDxzy+ZBJt0uSqr54Vd6CPQdtDxwxVfYOXVSz7XPVbF9T7+vhP5ieijbNaXMoLCBU4YFhVkcBAAAA/BIjjWjTkqN667joPlbHAAAAaHGONCIYdPLFh93u7DNazj6jmzISmgkjjWizvKZXd669Tx/vPXhaBAAAAIADGGlEm1Xtcen4mP6KDYmxOgoAAAAa6fHHH9ann36swsIC3XzzdQoPb69XXnnD6litEkUj2iynzaEL+vzB6hgAAAA4Cjff/FfdfPNfrY7RJjA9FW3Wv7f9R/d//ZjVMQAAAAC/xkgj2qw+kT0UExxtdQwAAADAr1E0ok3yeD3q3+E4BTkCrY4CAAAA+DWmp6JN2rn/Z/3ls1naUbTT6igAAACAX6NoRJsUEdheE7qOVUJovNVRAAAAAL/G9FS0SQ6bXRO7jZPN4HsTAAAA4HD4xIw26ZH1C/TKliVWxwAAAAD8HiONaHO8plepPc5SRGB7q6MAAADgKO3fX6x7752lffsy5HQ6lZTUWX/96x2KjIy0Olqrw0gj2pwSV6l6RXRXr4juVkcBAADAUTIMQ1OnXqbXX39bixf/Wx07JmnRoqesjtUqUTSizflk71rNXjdPbq/b6igAAAAt1uPfLdK6rG+b/OeGCg9vrxNOGFr7uF+//srOzj7Gs8KhMD0Vbc7whCFKCk2Q0+60OgoAAACagNfr1TvvvKVRo06xOkqrZJimaVodwh8UFJTJ6+VX0dpFR7fTFzs2qkt4JwU5Aq2OAxwkJiZMeXmlVscA6kUfhb+jjzaf7OxfFB/fxeoYh/TII/OUn5+ruXMfls3m35MpHQ6b3G6vpRl+/7e02QxFR4fW296/f6NAE8soydKT3z+rjXmbrY4CAACAJvD0048rI2OP7r77Ab8vGFsqpqeiTYkN7aDrjr9SSWGJVkcBAADAMfr735/Rtm1b9PDDTyggIMDqOK0WRSPalF2Fe9Q+MFzhAWFWRwEAAMAx2LVrp/75zxfVqVNnzZhxhSQpISFRDzww3+JkrQ9FI9qUFze8oRBbiK4fdJXVUQAAAHAMunfvoTVrvrU6RptA0Yg25S8jr1ZWXpHVMQAAAIAWg6IRbUZuRb72Vxaqc3BXq6MAAAAALQbLC6HN2JT/ox5f97xcHpfVUQAAAIAWg5FGtBmnJY3UiO6D1M5d/z1oAAAAANTFSKMf21OaobyKAn5uop/Tdq2SYTTubwAAAAC0dRSNfuzZTYu18ucP+bkJfvaaXn2+b5225P3U6L8DAAAA0JYZpmmaVofwBwUFZfJ6/etXsb1op9o5Q9QxNIGfm+DnncU/a2j3ZBUVVlr9pwXqFRMTpry8UqtjAPWij8Lf0UebT3b2L4qP72J1jCaRn5+nu+++S0899fcjth01aqhWrfpMISEhB2174YW/67LLrpDT6WzwsR0Om9xur66//mpddNGlGjlydKOyN4Xf/y1tNkPR0fVfwkXR+F/+WDSi6fE/Evg7+ij8HX0U/o4+2nxaU9HYGIcrGg+3rT4tsWhkeioAAACAFuU//3lLjzwyT5KUnr5Zo0YN1ZYtP0qS5s9/UEuXvi1J+vHHzbrhhv/TFVdcoiuuuERffLFGkpSVlamzzx5bu79PPvlQU6eep8svn6rFi/+hUaOGqqKionb7m2/+S1dddZmmTEnVJ58cuAzq1+Nfc80V+tOfpqq0tFTl5WV68MF7NX36ZZo27UI9/vh8eTweSdLu3bs0ffo0XXTRHzV79u1yuQ69on9BQX5t5ksuOV8LFjwhSaqqqtLZZ49VcXFxbdunn35c//jHsw06h2PB6qkAAAAAGm3vQw/UeRw+cpTajxytwuVpKt/8g9r1H6CoiSnav/ZzlaxdU6dtp1tvl3t/sbL+vlCSlPB/18jRPkJ7H3pAnW69/YjHHjp0mN544zVJ0vr136h//4H69ttvlJzcT+vXf62LLrpEpaWlmj//fj388JPq0KGD8vPzNX36ZVq8+N919lVYWKCHHrpff//7i+rUqbP+/e9XDzpeu3bt9Pzzi7Vp0/eaNet2nXbaWP35z7fpnXeWaOHCf9SOND744L0aNOgEzZz5N3m9Xt1991167713dc45f9C9987SlCkXatKkc/T99xt17bVXHvLcQkPDNG/eYwoJCZHb7dYtt1yvL7/8QieddLJGjz5NH3ywUlOmXCi3260PPlipRYv+0aBzOBY+G2ncvXu3LrjgAo0fP14XXHCBfv7554Pa5OXl6ZprrtGkSZN01llnaenSpXW2L1++XJMmTVJKSoomTZqk/Px8SZLH49Hdd9+tcePG6YwzztCSJUt8cUoAAAAALJCU1EnV1dXKzc3Rt99+o6uvvlbr13+tnJxs1dTUqGPHJG3evFFZWZn6y19u1J/+NFV/+cuNMgxD+/btrbOv9PTN6t27jzp16ixJOvvs1IOON3bseElSv34DlJ+fp+rq6kPmWrPmM73++j/1pz9N1RVXXKJt27Zq7949Ki8v0+7dOzV+/ERJUv/+A9S9e89D7sPr9WrBgic0bdpFuvLKS7Rr107t2LFdknTWWZO0YsUySdKXX36hLl26KiEhsUHncCx8NtI4e/ZsTZ06VampqVq6dKlmzZqlxYsX12nz4IMPqn///lq4cKEKCwt17rnnatiwYUpISNAPP/ygp59+Wi+//LJiYmJUWlqqgIAASdKyZcu0Z88erVq1SsXFxZo8ebJGjBihpKQkX50eAAAA0KbUNyIYNTFFURNTah+3Hzla7Q9x3Z6jfcRB+2jIKOOvhgw5UV988bmKigp0wglD9dhjD2ndujU64YShkiTTlHr06KVnnnnuoNdmZWU2+DiSausOu90uSbVTTg9m6v7756tjx7p1SHl5WYOP9e9/v6rS0hI9++xLCgwM1Lx5c+VyHShSjz9+kCoqKrRz509asWKZJk6c1KjzOFo+GWksKChQenq6UlIOdJ6UlBSlp6ersLCwTrutW7dq9OgDHSoqKkp9+/bVihUrJEkvvfSSrrjiCsXExEiSwsLCFBgYKOnACOSUKVNks9kUFRWlcePGaeXKlb44NQAAAAAWGDLkRL3yyssaMOB4SdKAAcfrlVde1tChwyRJ/fsPVEbGHn333be1r9my5Uf9fh3Q447rr+3bt2nfvgxJ0ooVaQ3OEBLSrk5BOHLkKXrllZdri8ri4mJlZu5Tu3ah6t69pz744ECNkp6+Wbt2HfpWcKWlpYqO7qDAwEDl5eVqzZpP62yfMOFs/etfr2jjxg067bSxx3wODeGTkcasrCzFxcXVVuZ2u12xsbHKyspSVFRUbbt+/fpp+fLlGjBggDIyMrRhw4ba0cKdO3cqKSlJF198sSoqKnTGGWfommuukWEYysrKUmJiYu1+EhISlJ2d3aiMh1stCK1LTEyY1RGAw6KPwt/RR+Hv6KPNIzfXJofDf9bRHDZsuO69d5aGDRsuh8OmYcOG691339GwYcPkcNgUFRWhhx9+XE899biefPKR2mmr8+c/LrvdJsmQw2FTbGyMbrvtDv31rzcpKChII0eOlsPhUGhoiGy2A+frcNQ9918fT516iW666RoFBgZqwYLndMstf9XTTz+hyy+fKsMw5HQ6dfPNf1Hnzp00Z869uvfeOXr11ZfVo0dPJScfJ7vdOOh3euGFF+nOO2/TZZddoNjYWJ144jDZbP9rl5IySeeeO0lnn32OQkMPXEvZkHP4LZvN1qj3iU9uubF582bddttteu+992qfmzhxoh5++GH169ev9rnCwkLdf//92r59uxITExUUFKS4uDjdfvvtmjRpkjp27Kgnn3xSLpdLV111lS688EJNnjxZkyZN0ty5czVw4EBJ0nPPPaecnBzdddddDc7ILTfaBpbhhr+jj8Lf0Ufh7+ijzac133KjoqJcISHtJEnvvfeu0tKWauHCF5rlWL/ecqOpNeYcGnvLDZ+MNCYkJCgnJ0cej0d2u10ej0e5ublKSEio0y4qKkrz58+vfTx9+nT17HngAtHExERNmDBBAQEBCggI0NixY7Vp0yZNnjxZCQkJyszMrC0afz/yCAAAAAD1WbLkX/r44w/l8bgVHt5et93W8MEnf9Gc5+CTojE6OlrJyclKS0tTamqq0tLSlJycXGdqqiQVFRUpLCxMDodD69at0/bt2/Xkk09KOnAd5KeffqrU1FS53W59+eWXGj/+wCpGEyZM0JIlS3TmmWequLhYq1ev1quvNu0yswAAAABap2nTrtS0aYe+BUZL0Zzn4LPVU+fMmaOZM2dqwYIFCg8P17x5B26GOX36dN14440aMGCANm3apLlz58pmsykyMlKLFi1ScHCwJOnss8/W5s2bNXHiRNlsNo0aNUp//OMfJUmpqanauHGjzjzzTEnSddddp06dOvnq1AAAAACg1fLJNY0tAdc0tg1c5wB/Rx+Fv6OPwt/RR5tPdvYviovrLMMwrI7SojXXNY0NZZpe5eRkKD6+c+1zR7qm0X+WPwIAAADgtxyOAJWXlxx0ywq0DKZpyu2uUXFxvgICghr1Wp9NTwUAAADQckVGxqioKE9lZcVWR2nRbDabvF5rRhptNruCg0MVGtq+Ua+jaAQAAABwRHa7Qx06JBy5IQ6rJU6hZnoqAAAAAKBeFI0AAAAAgHoxPfW/bDZWgWor+FvD39FH4e/oo/B39FH4O3/ro0fKwy03AAAAAAD1YnoqAAAAAKBeFI0AAAAAgHpRNAIAAAAA6kXRCAAAAACoF0UjAAAAAKBeFI0AAAAAgHpRNAIAAAAA6kXRCAAAAACoF0UjAAAAAKBeFI0AAAAAgHpRNKLVKyoq0vTp0zV+/HhNmjRJ119/vQoLC62OBRzS008/rT59+mj79u1WRwHqqK6u1uzZs3XmmWdq0qRJ+tvf/mZ1JKCOjz/+WJMnT1ZqaqrOOeccrVq1yupIaOPmzZunMWPGHPT/9d27d+uCCy7Q+PHjdcEFF+jnn3+2LmQDUTSi1TMMQ1dddZXef/99LVu2TJ06ddL8+fOtjgUc5Mcff9T333+vjh07Wh0FOMjDDz+swMDA2n9Lb7rpJqsjAbVM09Stt96qhx56SEuXLtVDDz2k2267TV6v1+poaMPGjh2rV1999aD/r8+ePVtTp07V+++/r6lTp2rWrFkWJWw4ika0ehERERo+fHjt40GDBikzM9PCRMDBXC6X7rnnHs2ZM8fqKMBBysvL9Z///Ec33XSTDMOQJHXo0MHiVEBdNptNpaWlkqTS0lLFxsbKZuOjLqwzdOhQJSQk1HmuoKBA6enpSklJkSSlpKQoPT3d72fBOawOAPiS1+vV66+/rjFjxlgdBajjiSee0DnnnKOkpCSrowAH2bt3ryIiIvT000/rq6++Urt27XTTTTdp6NChVkcDJB2YVfT444/r2muvVUhIiMrLy/Xss89aHQs4SFZWluLi4mS32yVJdrtdsbGxysrKUlRUlMXp6sfXL2hT7r33XoWEhOiSSy6xOgpQa8OGDdq8ebOmTp1qdRTgkDwej/bu3avjjjtOb7/9tv7yl7/ohhtuUFlZmdXRAEmS2+3W3//+dy1YsEAff/yxFi5cqJtvvlnl5eVWRwNaBYpGtBnz5s3TL7/8oscff5zpKvAr33zzjXbu3KmxY8dqzJgxys7O1pVXXqk1a9ZYHQ2QJCUkJMjhcNROpzr++OMVGRmp3bt3W5wMOGDLli3Kzc3VkCFDJElDhgxRcHCwdu7caXEyoK6EhATl5OTI4/FIOvClXG5u7kHTWP0Nn5zRJjz66KPavHmznnnmGQUEBFgdB6jj6quv1po1a/TRRx/po48+Unx8vF544QWNGjXK6miAJCkqKkrDhw/X2rVrJR1Y+a+goEBdunSxOBlwQHx8vLKzs7Vr1y5J0s6dO1VQUKDOnTtbnAyoKzo6WsnJyUpLS5MkpaWlKTk52a+npkqSYZqmaXUIoDnt2LFDKSkp6tq1q4KCgiRJSUlJeuaZZyxOBhzamDFjtGjRIvXu3dvqKECtvXv36o477lBxcbEcDoduvvlmnXrqqVbHAmq9++67eu6552oXa7rxxhs1btw4i1OhLbvvvvu0atUq5efnKzIyUhEREXrvvfe0c+dOzZw5UyUlJQoPD9e8efPUvXt3q+MeFkUjAAAAAKBeTE8FAAAAANSLohEAAAAAUC+KRgAAAABAvSgaAQAAAAD1omgEAAAAANSLohEAgGa0a9cupaamavDgwVq8eHG97d5++21ddNFF9W6/9NJLtWTJkuaICADAYTmsDgAAQGv2/PPPa/jw4Vq6dKnVUQAAOCqMNAIA0IwyMzPVq1cvq2MAAHDUKBoBAGgml112mb766ivdc889Gjx4sLZu3apbb71VJ510kk4//XQtWLBAXq/3kK9du3atJkyYoCFDhuiee+6RaZo+Tg8AwAEUjQAANJPFixdr6NChmjVrljZs2KB//OMfKi0t1erVq/XPf/5TS5cu1VtvvXXQ6woLC3X99dfr5ptv1pdffqnOnTvru+++s+AMAACgaAQAwCc8Ho+WL1+uP//5zwoNDVVSUpIuv/xyvfvuuwe1/eyzz9SrVy9NmDBBTqdT06ZNU4cOHSxIDQAARSMAAD5RVFSkmpoaJSYm1j6XmJionJycg9rm5uYqPj6+9rFhGEpISPBJTgAAfo+iEQAAH4iMjJTT6VRmZmbtc1lZWYqLizuobUxMjLKzs2sfm6aprKwsn+QEAOD3KBoBAPABu92uCRMm6LHHHlNZWZn27dunF198Ueecc85BbU899VTt2LFDq1atktvt1uLFi5Wfn29BagAAKBoBAPCZv/3tbwoODta4ceM0depUpaSk6LzzzjuoXVRUlJ544gk98sgjGj58uH755RedcMIJFiQGAEAyTNbwBgAAAADUg5FGAAAAAEC9KBoBAAAAAPWiaAQAAAAA1IuiEQAAAABQL4pGAAAAAEC9KBoBAAAAAPWiaAQAAAAA1IuiEQAAAABQr/8PqJADst/RbqYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.lineplot(data=reports_df.reset_index(drop=True),x='fold',y='precision',hue='type',style='type')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.lineplot(data=reports_df.reset_index(drop=True),x='fold',y='recall',hue='type',style='type')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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erqGDBmiRYsWHXG7f//737r88suP2P7rX/9aixcvDkREAACOym52AAAA2qvnnntOI0eO1JIlS8yOAgBAszBDCQCASbKzs9WnTx+zYwAA0GwUlAAAmOCqq67Sl19+qQceeEBDhgzR1q1bddddd+mUU07RmWeeqQULFsjn8x123zVr1igtLU3Dhg3TAw88IMMwWjg9AAAHUVACAGCCRYsWafjw4Zo5c6bWr1+vF154QeXl5Vq1apVefvllLVmyRG+99dYh+xUXF+u3v/2tbr/9dn3xxRfq2rWrvvvuOxPOAAAACkoAAEzn9Xq1bNky3XnnnYqMjFTnzp117bXX6t133z1k288++0x9+vRRWlqaHA6Hrr76anXs2NGE1AAAUFACAGC6kpISud1upaSk1L+WkpKivLy8Q7bNz89XcnJy/fcWi0Uul6tFcgIA8L8oKAEAMFlsbKwcDoeys7PrX8vJyVFSUtIh2yYkJCg3N7f+e8MwlJOT0yI5AQD4XxSUAACYzGazKS0tTY8++qgqKiqUlZWlF198Ueedd94h255++unasWOHVq5cKY/Ho0WLFqmwsNCE1AAAUFACABAU/vSnP8npdOqss87S1KlTNXnyZF144YWHbBcXF6fHH39cDz/8sEaOHKm9e/dq6NChJiQGAECyGNxrHAAAAADQDMxQAgAAAACahYISAAAAANAsFJQAAAAAgGahoAQAAAAANAsFJQAAAACgWSgoAQAAAADNQkEJAAAAAGgWCkoAAAAAQLP8fy6V+9k0AZpKAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.lineplot(data=reports_df.reset_index(drop=True),x='fold',y='f1-score',hue='type',style='type')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at uer/roberta-base-finetuned-dianping-chinese were not used when initializing BertModel: ['classifier.bias', 'classifier.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Accuracy:  1.000\n"
     ]
    }
   ],
   "source": [
    "# load best bert model\n",
    "model = BertClassifier()\n",
    "checkpoint = torch.load('./model/bert_best_model.pth')\n",
    "model.load_state_dict(checkpoint['model'])\n",
    "#evaluate\n",
    "test_pred, test_target = evaluate(model, df_test.reset_index(drop=True))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Classification report"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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+vrrr5WRkaGKigpFRERo4cKFateuXa1rjh8/rszMTBUWFqq6ulpTp05VUlKSpHPvRMzJyZHdbldYWJhmzZql/v37S5IyMjL0j3/8Qy1btpR0brrIvffeW288HpOT/Px8bdy4UaNGjdKcOXM0ffp0/f73v7+Y3w4AAADg/+cPbV1ZWVm64447lJSUpE2bNikzM1OrV6+udc2TTz6p7t27a8WKFSorK9OoUaPUt29fORwO9ejRQ3fffbeaNm2qgwcPavz48dqxY4d7WsiUKVM0fvx4r+PxuJRwo0aNFBoaKpvNprNnzyomJkYlJSUX+LMBAAAA+EJlZaUKCwsNW2VlZa3rTp48qf3792v48OGSpOHDh2v//v0qKyurdd3Bgwfd1ZDIyEh16dJFW7dulST1799fTZs2lSR17txZLpdLFRUVFx27x8pJs2bNdPr0afXq1UsZGRmKiopigjwAAADwM5nV1rVq1SotW7bMcDw1NVVpaWnu/eLiYsXExCgkJETSuXcbRkdHq7i4WJGRke7runXrppycHCUkJKiwsFC7d+9WmzZtDPd/66231LZtW/3iF79wH3vllVe0du1axcfH64EHHlCHDh3qjd1jcvLMM88oJCRE6enpeuWVV/Ttt99qyZIlnr4GAAAAwAITJ05USkqK4Xh4ePhF3S8jI0Pz589XUlKSYmNjlZiY6E5ofvTRRx9pyZIlevnll93HZs2apaioKNntdr311lu65557lJeXZ/juf/KYnLRu3dr9edq0aRfzewAAAAD8hFkvYQwPD/cqEXE4HCotLVVNTY1CQkJUU1OjY8eOyeFw1LouMjJSixcvdu9PnjxZHTt2dO/v3r1bDz30kJYvX6727du7j8fExLg/Jycna8GCBSopKVFcXFydMXmccwIAAADg0nO6XKZs3mrVqpW6du2qzZs3S5I2b96srl271mrpkqTy8nJVV1dLknbu3KlDhw6556ns3btXs2bN0nPPPadu3brV+l5paan78/vvvy+73V4rYTkfj5UTAAAAAIHp8ccfV0ZGhpYvX67w8HAtXLhQ0rnqyIwZM5SQkKC9e/dq3rx5stvtatmypVauXOmeBD979mz98MMPyszMdN9z0aJF6ty5s9LT03Xy5EnZbDY1b95cK1asUGho/emHzeXDNcw+jjP2vgEAAACXUp+ijVaH4JVuMdeZct/P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J5SVlaWCggJJ0m9/+1slJydLOvdfeJOSkvSPf/xDx48f1913363x48db8WcDfOZSjMPs7GytXr1aZ8+elSSlp6crMTHRwl8F+If58+fr008/1ddff601a9botdde8+p7p0+fVnp6ur788kuFhobqyiuv1JIlSyRJb775plavXi1JCgsL05/+9Ce1bt1ab731ll566SVJUtu2bTVnzhy1atVKGzZs0Ntvv61mzZrpm2++0VNPPaWqqiotXrxYp06dkiTNmDFDN9xww6X/AwABhOQkgNjtdm3atElfffWVbr/9dvXu3VutWrWSJDVu3Fjr16+XdK79qk+fPpo3b56cTqcefPBBrV+/XrfeeqsefPBBDRgwQEuXLpUklZWVGZ7z3HPPac6cOerVq5dqamp0+vRpwzVz587VL3/5Sz3//PM6duyYRo0apauuukqdOnWSJP3www9au3atCgsLNWLECKWkpKhZs2Zm/WkAv/Bzx+GvfvUrDR8+XDabTV999ZXuuusuvffee5b9HsBfPProozpw4ID7P5B5a8eOHTp16pS7bfnf//63JOnDDz/Un/70J61Zs0ZRUVE6deqUQkNDdejQIS1evFgbNmxQdHS0nn32WT3xxBN69tlnJUl79uzRpk2b1LZtW1VWVmrChAl64YUXFB0drWPHjmn06NHavHmzwsPDL/nfAAgUJCcBZMyYMZKk9u3b66qrrtL//u//atCgQZKklJQU93V///vftXfvXr3yyiuSziUKMTExOnXqlHbv3u0+LkmRkZGG5/Tr108LFizQ0KFD9etf/9qdcPynnTt3KiMjQ5IUHR2tAQMG6MMPP3Rf+5vf/EaS1KZNG4WHh6ukpEQdOnS4FH8GwG/93HF45MgRPfDAAyotLVVoaKhOnDih48ePKyoqyrc/BAgQXbp00b/+9S/Nnj1bffv2dVc13n33XSUlJbnH1o//8ezDDz/UgAEDFB0dLUkaO3askpKS3Pe75ppr1LZtW0nS7t27VVhYqMmTJ7vP22w2ffPNN0pISPDFzwMaJJKTIHHZZZe5P7tcLi1fvlzx8fG1rvmx7OzJo48+qs8//1y7du3SzJkzNWnSJN16660XFE/jxo3dn0NCQlRTU3NB3wcaop87Du+//35lZGRo8ODBcjqd6tmzp86cOWNavECgWb9+vbtV67e//a1GjhypzZs3a9euXXrvvff0xz/+UdnZ2Rd9///sAHC5XOrcubNef/31nx03EExYrSuA/NgucvjwYe3fv19XX331ea8bOHCgXnjhBXdCUFZWpiNHjqhZs2bq1auXXn31Vfe152vr+uqrr9S5c2dNnDhRI0eO1L59+wzXJCYm6o033pAkHT9+XPn5+erXr9/P/IVA4LiYcfjtt9+qTZs2ks6N96qqKp/HDTRkt9xyizZt2qRNmzZp5MiRKikpUUhIiAYPHqxHHnlEZWVlqqio0A033KBNmzbpxIkTks79R4Mf54bl5+fr+PHjkqQ33nhD//Vf/3XeZ/Xq1UvffPONdu3a5T62d+9euVwu838o0IBROQkgNTU1Sk5O1unTp90T9M7n0Ucf1VNPPaWkpCTZbDaFhYXp0UcfVXx8vBYvXqzZs2dr+PDhstvtGj58uKZMmVLr+08//bS++eYbhYSEKDw8/LyrdP3+979XZmamRowYIUl68MEH9ctf/vLS/2iggbqYcfjII49o2rRpatGihfr376+IiAirfwbgl+bOnavc3FydOHFCkyZNUkREhLZs2WK47vPPP9fTTz8tSXI6nZoyZYpiYmIUExOjKVOmaNKkSbLZbGrUqJFWrlypTp066cEHH9Tdd98tSYqPj9ecOXPOG0OLFi20fPlyPfXUU5o/f77Onj2r+Ph4rVy5UjabzbwfDzRwNhcpfEDo3Lmz/vnPfzKpHAAAAA0WbV0AAAAA/AKVEwAAAAB+gcoJAAAAAL9AcgIAAADAL5CcAAAAAPALJCcAAAAA/ALJCQAAAAC/8P8BcgQoQDbJGqIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1080x576 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "gin_clf_report = classification_report(test_target, test_pred, output_dict=True)\n",
    "sns.set(rc = {'figure.figsize':(15,8)})\n",
    "sns.heatmap(pd.DataFrame(gin_clf_report).iloc[:-1, :].T, annot=True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### EDA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "from wordcloud import WordCloud\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def generate_word_cloud(result):\n",
    "    wordcloud = WordCloud(\n",
    "        width = 3000,\n",
    "        height = 2000,\n",
    "        font_path = './font/HYShangWeiShouShuW.ttf',\n",
    "        background_color = 'black'\n",
    "    ).generate_from_frequencies(result)\n",
    "    fig = plt.figure(\n",
    "        figsize = (40, 30),\n",
    "        facecolor = 'k',\n",
    "        edgecolor = 'k'\n",
    "    )\n",
    "    plt.imshow(wordcloud, interpolation = 'bilinear')\n",
    "    plt.axis('off')\n",
    "    plt.tight_layout(pad=0)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import jieba.analyse\n",
    "\n",
    "texts = [\n",
    "    jieba.analyse.textrank(str(row[\"title\"]) + \" \" + str(row[\"content\"]), topK=50, withWeight=True)\n",
    "    for _, row in sample_df[sample_df['category']=='N'].iterrows()\n",
    "]\n",
    "result = {}\n",
    "\n",
    "for text in texts:\n",
    "    for list in text:\n",
    "        result[list[0]] = (list[1] + result[list[0]]) if list[0] in result else list[1]\n",
    "\n",
    "generate_word_cloud(result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "deepnote": {
   "is_reactive": false
  },
  "deepnote_execution_queue": [],
  "deepnote_notebook_id": "d474c43d-1a0e-4f31-a70c-bbe57c19c101",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
